Làm cách nào để hạn chế thời gian tính toán của con tôi?


60

Truy cập vào máy tính của chúng tôi (không chỉ vào internet) cần phải được hạn chế đối với tài khoản của con tôi (7, 8) cho đến khi chúng đủ lớn để tự mình quản lý việc này. Cho đến lúc đó chúng ta cần có thể định nghĩa như sau:

  • giờ trong ngày khi tính toán ổn (ví dụ 5 - 9 giờ tối)
  • các ngày trong tuần khi điện toán không ổn (ví dụ từ thứ Hai đến thứ Sáu)
  • lượng thời gian cho phép mỗi ngày (ví dụ 2 giờ)

Trong 11.10, tất cả những điều sau đây được sử dụng để thực hiện công việc không hoạt động nữa:

  • Timekpr : cho> 11.10 không có sẵn thông qua ppa.
  • Timeoutd : thay thế dòng lệnh, nhưng từ 11.10 đã bị xóa khỏi kho lưu trữ .
  • Gnome Nanny : Trông rất tuyệt nhưng liên tục gặp sự cố để buộc khởi động lại máy chủ X. Vì vậy, chúng tôi không thể sử dụng hoặc giới thiệu chương trình này vào lúc này.

Còn lựa chọn nào nữa ko?


Hmmm ... nếu không có bất cứ điều gì làm điều này, có thể dễ dàng hack nó cùng với các kịch bản shell / công việc cron.
Nathan Osman

11
TUẦN. Không thể để bố mẹ tôi nhìn thấy cái này. NHƯNG, tôi sẽ giải quyết nó bởi vì tôi có quyền truy cập root tuyệt vời. : P
jrg

Sở thích là "vẫn đang được phát triển", nhưng tôi không nghĩ rằng nó xứng đáng với một câu hỏi mới.
RobotHumans

Khác với nhà phát triển timekpr hứa hẹn anh ta có thể có hoặc không có thời gian để tiếp tục phát triển, không có ứng dụng nào như vậy afaik. Nhưng từ kinh nghiệm của bản thân tôi bây giờ tôi biết rằng chúng ta có thể làm tốt (thậm chí tốt hơn?) Mà không cần đến những đứa trẻ thông minh và cha mẹ thông minh .
Takkat

@jrg hoặc chỉ là một usb trực tiếp;)
Wilhelm Erasmus

Câu trả lời:


1

Khóa màn hình hẹn giờ

systray.gif

Tạo Bộ đếm thời gian Khóa màn hình của riêng bạn thay vì các ứng dụng của bên thứ 3

Mặc dù có các ứng dụng của bên thứ 3 để thực hiện việc này, bạn có thể tạo ứng dụng của riêng mình. Tóm tắt các bước:

  • Sử dụng geditđể tạo tập lệnhlock-screen-timer
  • Sao chép và dán mã từ cửa sổ này vào lock-screen-timer
  • Đánh dấu lock-screen-timerlà một thực thi
  • Kiểm tra nó!
  • Cấu hình Nautilus để thực thi các tập lệnh bash
  • Tạo liên kết phím tắt trên màn hình
  • Theo dõi thời gian còn lại

Sử dụng geditđể tạo tập lệnhlock-screen-timer

Mở Terminalbằng Ctrl+ Alt+ Tvà gõ:

gedit lock-screen-timer

Sao chép và dán mã từ cửa sổ bên dưới để lock-screen-timer

Chuyển trở lại màn hình này và sao chép mã sau bằng cách tô sáng nó và nhấn Ctrl+ C:

#!/bin/bash

# NAME: lock-screen-timer
# PATH: $HOME/bin
# DESC: Lock screen in x minutes
# CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99"
# DATE: Created Nov 19, 2016. Last revision Mar 22, 2018.
# UPDT: Updated to support WSL (Windows Subsystem for Linux)
#       Remove hotplugtv. Replace ogg with paplay.

# NOTE: Time defaults to 30 minutes.
#       If previous version is sleeping it is killed.
#       Zenity is used to pop up entry box to get number of minutes.
#       If zenity is closed with X or Cancel, no screen lock timer is launched.
#       Pending lock warning displayed on-screen at set intervals.
#       Write time remaining to ~/.lock-screen-timer-remaining

MINUTES="$1" # Optional parameter 1 when invoked from terminal.

# if no parameters set default MINUTES to 30
if [ $# == 0 ]; then
    MINUTES=30
fi

DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers.

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

# Running under WSL (Windows Subsystem for Linux)?
if cat /proc/version | grep Microsoft; then
    WSL_running=true
else
    WSL_running=false
fi


while true ; do # loop until cancel

    # Get number of minutes until lock from user
    MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT")

    RESULT=$? # Zenity return code
    if [ $RESULT != 0 ]; then
        break ; # break out of timer lock screen loop and end this script.
    fi

    DEFAULT="$MINUTES" # Save deafult for subsequent timers.
    if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then
        break ; # zero minutes considered cancel.
    fi

    # Loop for X minutes, testing each minute for alert message.
    (( ++MINUTES )) 
    while (( --MINUTES > 0 )); do
        case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920)
            notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ;
            if [[ $WSL_running == true ]]; then  
                powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
            else
               paplay /usr/share/sounds/freedesktop/stereo/complete.oga ;
            fi
           ;;
        esac;

        # Record number of minutes remaining to file other processes can read.
        echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Ubuntu versions > 14.04.
        dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    fi

done # End of while loop getting minutes to next lock screen

exit 0 # Closed dialog box or "Cancel" selected.

Sau đó chuyển trở lại geditcửa sổ trống và dán mã bằng Ctrl+ V. Lưu tệp và thoát trình chỉnh sửa trở lại dấu nhắc lệnh.

Đánh dấu lock-screen-timerlà một thực thi

Bây giờ chúng ta cần làm cho tập lệnh thực thi bằng cách gõ:

chmod +x lock-screen-timer

Kiểm tra nó!

Trước khi gọi tập lệnh từ GUI, chúng tôi sẽ gọi nó từ thiết bị đầu cuối để chúng tôi có thể xem liệu có bất kỳ thông báo lỗi nào được hiển thị không:

~/lock-screen-timer

Bạn được nhắc về số phút:

Khóa màn hình hẹn giờ

Đặt số phút mong muốn và nhấp OK để bắt đầu hẹn giờ. Khi có 15, 10, 5, 3, 2 và 1 phút để lại âm thanh hệ thống và một bong bóng thông báo xuất hiện thông báo khi màn hình sẽ bị khóa. Sau khi màn hình bị khóa, bạn cần nhập mật khẩu để mở khóa màn hình.

Cấu hình Nautilus để thực thi các tập lệnh bash

Nautilus định nghĩa những gì xảy ra khi chúng ta nhấp đúp vào tập lệnh thực thi khi cửa sổ hiển thị tệp hoặc liên kết trên màn hình. Hành vi bình thường là chỉnh sửa tập lệnh bằng cách sử dụng gedit. Chúng tôi muốn thay đổi hành vi này để nó được thực thi.

Bắt đầu Nautilus và điều hướng đến thư mục chứa lock-screen-timer. Nhấp chuột trái vào nó một lần để tập trung vào nó. Di chuột qua thanh menu trên cùng cho đến khi menu "Chỉnh sửa tệp ..." xuất hiện, sử dụng:

  1. Nhấp vào Editmenu thả xuống
  2. Bấm Propertiestùy chọn
  3. Bấm vào Behaviortab
  4. Quan sát các nút tùy chọn radio bên dưới Executable Text Files
  5. Kiểm tra nút radio Run executable text files when they are opened

Tạo liên kết phím tắt trên màn hình

Từ phần trước lock-screen-timervẫn có trọng tâm. Nếu không, điều hướng đến tập lệnh và nhấp chuột trái vào tập lệnh một lần để tập trung vào nó. Sau đó sử dụng:

  • Nhấp chuột phải vào tập tin và các tùy chọn menu ngữ cảnh xuất hiện.
  • Từ menu chọn Make Link.
  • Một biểu tượng mới xuất hiện được gọi là Link to lock-screen-timer.
  • Nhấp chuột trái vào biểu tượng mới và kéo nó từ Nautilus vào máy tính để bàn của bạn.

Bây giờ bạn có thể nhấp đúp vào liên kết phím tắt trên màn hình và tập lệnh được chạy. Một hộp thoại xuất hiện để lấy số phút. Hai nút được trình bày CancelOK. Nếu bạn bấm vào Xđể đóng cửa sổ, nó giống như chọn Cancel.

Sau khi bộ đếm thời gian đang chạy và bạn nhấp đúp chuột vào nó một lần nữa, bản sao đang chạy đầu tiên bị "giết". Bây giờ bạn có thể bắt đầu đếm ngược khóa mới hoặc nhấp vào Cancelđể không đếm ngược.

Thời gian hiển thị còn lại trong khu vực thông báo / thông báo

Trong khi bộ đếm thời gian màn hình khóa đang chạy, nó ghi lại bao nhiêu phút còn lại vào tệp ~/.lock-screen-timer-remaining. Bạn có thể xem tệp này bằng watchlệnh hoặc hiển thị nó trên thanh chỉ báo ứng dụng / khay hệ thống của Ubuntu như được hiển thị ở đầu câu trả lời này. Để hiển thị thời gian còn lại trong khu vực thông báo, hãy làm theo các hướng dẫn trong Hỏi & Đáp này: ( BASH có thể hiển thị trong systray làm chỉ báo ứng dụng không? ).


38

Ubuntu <= 11.10 Người dùng làm theo hướng dẫn này cho Người dùng Ubuntu> = 11.10 đọc thông báo trang dưới cùng:

Có tất cả các chương trình đó đã hết hạn và tất cả các câu hỏi của bạn được trả lời ở đây và có cái nhìn tốt với sự kiểm soát của phụ huynh .....

Khi chúng tôi nói về việc buộc người dùng đăng xuất, điều chúng tôi thực sự đang nói đến là thực hiện các hạn chế về thời gian đối với tài khoản để truy cập hệ thống hoặc dịch vụ. Cách dễ nhất mà tôi đã tìm thấy để thực hiện các hạn chế về thời gian là sử dụng mô-đun trình cắm có tên là Linux-PAM .

Mô đun xác thực Pluggable (PAM) là một cơ chế để xác thực người dùng. Cụ thể, chúng tôi sẽ sử dụng pam_timemô-đun để kiểm soát quyền truy cập theo thời gian của người dùng đối với các dịch vụ.

Sử dụng pam_timemô-đun, chúng tôi có thể đặt các hạn chế truy cập cho một hệ thống và / hoặc các ứng dụng cụ thể vào các thời điểm khác nhau trong ngày cũng như vào các ngày cụ thể hoặc trên các dòng thiết bị đầu cuối khác nhau. Tùy thuộc vào cấu hình, bạn có thể sử dụng mô-đun này để từ chối quyền truy cập cho từng người dùng dựa trên tên của họ, thời gian trong ngày, ngày trong tuần, dịch vụ họ đang đăng ký và thiết bị đầu cuối của họ mà họ đang yêu cầu .

Khi sử dụng pam_time, bạn phải chấm dứt cú pháp của từng dòng (hoặc quy tắc) trong /etc/security/time.conftệp bằng một dòng mới. Bạn có thể nhận xét từng dòng bằng dấu thăng [#] và hệ thống sẽ bỏ qua văn bản đó cho đến dòng mới.

Đây là cú pháp cho một quy tắc:

dịch vụ; ttys, người dùng, thời gian

The first field   services  is a logic list of PAM service names.
The second field  tty  is a logic list of terminal names.
The third field  users  is a logic list of users or a netgroup of users.
The fourth field  times  indicates the applicable times.

Đây là một ví dụ về một bộ quy tắc điển hình:

login ; * ; !bobby ; MoTuWeThFr0800-2000
login ; * ; !root ; !Al0000-2400
http ; * ; !bobby ; MoTuWeThFr0800-2000
http ; * ; !root; !Al0000-2400

Các quy tắc này hạn chế người dùng đăng nhập vào giữa giờ 0800 và 2000 và họ cũng hạn chế truy cập Internet trong những giờ này. Root sẽ có thể đăng nhập bất cứ lúc nào và duyệt Internet trong mọi thời điểm.

Lưu ý: Hệ thống ghi lại các lỗi với các quy tắc này là syslog (3).


Với Ubuntu Linux, có thể gán cho các giới hạn thời gian trên máy tính của bạn, để ngăn kết nối của một hoặc nhiều người dùng với hệ thống của bạn. Với các giới hạn về thời gian, ví dụ, bạn có thể giới hạn quyền truy cập vào máy tính cho con cái của bạn (một loại kiểm soát của cha mẹ, nói ngắn gọn) hoặc thậm chí bảo vệ kết nối với máy chủ của bạn trong một số giờ nhất định.

Cấu hình thủ công

Hiểu những gì bạn sẽ làm

Trong suốt hướng dẫn này, chúng tôi sẽ sử dụng PAM (Mô-đun xác thực có thể cắm được, Mô-đun xác thực có thể cắm bằng tiếng Anh). Nó cho phép bạn kiểm soát xác thực người dùng khi họ kết nối. Sau đó, chúng tôi sẽ sử dụng các tệp cấu hình bảo mật để xác định giờ đăng nhập được phép. Các thao tác này có thể được thực hiện trên bất kỳ phiên bản Ubuntu nào và chỉ cần một trình soạn thảo văn bản đơn giản (vim, emacs, nano, gedit, kate, để đặt tên cho một số). Kích hoạt giờ giới hạn thông qua Mô-đun PAM

Trước hết, trước tiên hãy đến /etc/pam.d/, nơi có tất cả các dịch vụ có thể định cấu hình:

$ Ls /etc/pam.d/
atd common-account common-session gdm login ppp sudo
chfn common-auth cron gdm-autologin Other samba
chsh common-cupsys gnome-screensaver password passwd su

Nếu chúng tôi muốn chặn kết nối với máy tính, chúng tôi sẽ phải thay đổi dịch vụ gdm. Chỉnh sửa tệp để gdm và thêm dòng mã này (ở cuối tệp):

account required pam_time.so

GDM là bản phân phối màn hình đăng nhập Ubuntu, Edubfox và Xubfox. Đối với Kubfox, sử dụng KDE, dịch vụ kdm được gọi, nó sẽ là tệp mà nó sẽ mở. Và bạn đã hoàn tất việc cấu hình PAM! Điều này sẽ cho phép kiểm soát giờ trên dịch vụ này.

Nếu bạn có một máy chủ, có lẽ bạn không có GUI. Trong trường hợp này, GDM / KDM không được cài đặt và kết nối sẽ không bị chặn. Để ngăn kết nối với TTY, bạn phải sửa đổi thông tin đăng nhập của cùng một tệp và thêm cùng một dòng mã so với xác nhận trước đó. Hành động này cũng áp dụng cho những người đã cài đặt GUI và muốn chặn quyền truy cập vào màn hình đăng nhập và thiết bị đầu cuối.

Định cấu hình Giờ truy cập

Bây giờ dịch vụ PAM đã được kích hoạt, chúng tôi chỉ phải định cấu hình thời gian truy cập. Mở /etc/security. Một số tập tin cấu hình có sẵn:

$ Ls /etc/security/
access.conf namespace.conf pam_env.conf
group.conf namespace.init time.conf
limits.conf opasswd time.conf.bak

Chỉnh sửa tập tin time.conf. Một số giải thích và ví dụ (tiếng Anh) giới thiệu. Để đặt lịch truy cập, sao chép và dán dòng mã sau (ở cuối tệp, như mọi khi):

*;*;user;scheduler

Thay vì trường người dùng, hãy nhập tài khoản đăng nhập bạn muốn chặn.

Nếu bạn muốn chặn nhiều người dùng, hãy nhập thông tin đăng nhập của họ liên tiếp, cách nhau bởi | nhà điều hành. Ví dụ: nếu tôi muốn đóng băng tài khoản của Patrick, John và Emily:

*;*;Patrick|jean|emilie;scheduler

Theo khuyết điểm, nếu bạn muốn chặn quyền truy cập vào hệ thống cho tất cả người dùng, đặc biệt là một người dùng, hãy sử dụng! Trước người liên quan. Ví dụ: nếu tôi muốn quyền truy cập vào máy tính bị từ chối đối với tất cả người dùng, ngoại trừ Nicolas và Xavier:

Nicolas *;*;!|xavier;scheduler

Bây giờ chuyển sang các khu vực lĩnh vực. Trong lĩnh vực này, việc lựa chọn ngày và giờ sẽ được phép kết nối. Trước tiên, bạn phải chỉ định ngày trong tuần, sử dụng các chữ viết tắt sau:

Mo : Monday     Fr : Friday     Wd : Sa/Su
Tu : Tuesday    Sa : Saturday   wk : Mo/Tu/We/Th/Fr
We : Wenesday   Su : Sunday
Th : Thursday   Al : All Days

Hãy cẩn thận đừng nhầm lẫn giữa các chữ viết tắt Wk và Wd là sai lệch! đặc biệt được xác định kém trên Internet: bạn có thể dễ dàng tìm thấy thông tin mâu thuẫn!

Sau đó, chúng tôi xác định thời hạn. Chúng phải được định dạng 24H, bao gồm 4 chữ số. Ví dụ: để hạn chế 3:17 chiều đến 6:34 tối, chúng tôi viết: 1517-1834. Để cho phép Marie chỉ kết nối vào thứ ba, từ 3:17 chiều đến 6:34 tối, chúng tôi có được kết quả:

*;*;marie;Tu1517-1834

Kết nối ngoài những giờ này sẽ bị cấm. Đối với người dùng, có thể sử dụng các toán tử | và! để chỉ ra nhiều lần (sau đó chỉ ra rằng tất cả các giờ đăng nhập được cho phép, ngoại trừ những giờ được hiển thị).

Hai ngôi sao (ký tự đại diện) ở đầu dòng mã lần lượt là các trường dịch vụ tty. Vì bạn muốn chặn tất cả quyền truy cập vào hệ thống, không cần thiết phải chỉ định dịch vụ nào hoặc bạn muốn chặn dịch vụ nào. Tuy nhiên, nếu bạn muốn ngăn chặn việc sử dụng một dịch vụ cụ thể, chỉ cần chỉ định nó như ví dụ sau:

login;tty1|tty4|tty5;marie;!Wd0000-2400

Do đó, người dùng kết hôn không thể kết nối với TTY, 4 và 5 vào cuối tuần.

Một số ví dụ về lịch trình hạn chế

mathilde được phép kết nối mỗi ngày từ 1:20 chiều đến 3:20 tối và từ 4:00 chiều đến 8:30 tối:

*;*;mathilde;Al1320-1520|Al1600-2030

Stone, Frank và Florian được phép kết nối từ 2:00 pm đến 6:45 pm trong các ngày trong tuần và 2:00 pm đến 10:15 pm cho cuối tuần:

*;*;Stone|franck|florian;Wk1400-1845|Wd1400-2215

Olive không bao giờ được phép kết nối. jessica có thể đăng nhập vào thứ Tư từ 1:00 chiều đến 4:00 chiều:

*;*;olivier;!Al0000-2400
*;*;jessica;We1300-1600

2 dòng khác nhau, trong hai thời gian khác nhau cho mỗi người dùng Hết hạn Phiên

Khi một phiên hết hạn (vượt quá thời gian trong khi người dùng đã được kết nối), PAM có thể đến tay người dùng. Mặc dù mathilde kết nối trong những giờ cho phép, nhưng hoàn toàn miễn phí khi vượt quá những giờ này! Đối với điều này, chúng tôi sẽ sử dụng một chương trình mới: ắccron. Ứng dụng này thực thi các lệnh trong khoảng thời gian. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng lệnh skskill-KILL-u, để ngắt kết nối người dùng khi phiên hết hạn. Xử lý rất đơn giản. Đơn giản chỉ cần chỉnh sửa tập tin ọ / etc / crontab. Sau đó thêm dòng mã sau:

Minute Hour Day * * (s) root skill -KILL -u User

Như trước đây, thay thế lịch trình trường phút và thời gian mong muốn. Sau đó điền vào (các) ngày bởi (các) ngày bị cấm (s) hoặc chỉ cần nhập dấu hoa thị (*) để chỉ ra tất cả các ngày trong tuần. Cuối cùng, thay đổi trường được sử dụng bởi tài khoản đăng nhập để bị chặn và thì đấy!

Ngày không nhận thấy cùng một cách với các croncông việc! Dưới đây là danh sách các chữ viết tắt sẽ được sử dụng với chương trình này:

mon : monday    fri : friday
tue : tuesday   sat : saturday
wed : wednesady sun : sunday
thu : thursday   *  : all hours

Một số ví dụ về croncông việc (với ví dụ về thời gian trong phần trước)

jessica có thể đăng nhập vào thứ Tư từ 1:00 chiều đến 4:00 chiều

-> Ngắt kết nối: Thứ ba lúc 4:00 chiều.

00 16 * root * wed skill -KILL -u jessica

mathilde được phép kết nối mỗi ngày từ 1:20 chiều đến 3:20 chiều và từ 4:00 chiều đến 8:30 tối.

-> Ngắt kết nối: Hàng ngày, 8:30 tối đến 3:20 chiều ET.

20 15 * * * root skill -KILL -u mathilde
30 20 * * * root skill -KILL -u mathilde

Stone, Frank và Florian được phép kết nối từ 2:00 pm đến 6:45 pm trong các ngày trong tuần và 2:00 pm đến 10:15 pm cho cuối tuần

-> Ngắt kết nối (1): Thứ Hai, Thứ Ba, Thứ Tư, Thứ Năm và Thứ Sáu, lúc 18 giờ 45 phút. -> Ngắt kết nối (2): Thứ bảy và Chủ nhật lúc 10:15 tối.

45 18    * * mon,tue,wed,thu,fri   root    skill -KILL -u stone && skill -KILL -u franck && skill -KILL -u florian
15 22    * * sat,sun               root    skill -KILL -u stone && skill -KILL -u franck && skill -KILL -u florian

Lệnh skill-KILL-u ngắt kết nối người dùng khỏi GUI, cũng như TTY. Nó là hoàn toàn có thể sử dụng cho các quản trị viên máy chủ. Tuy nhiên, lệnh này là ngay lập tức và việc ngắt kết nối sẽ được thực hiện mà không cần thông báo trước. Do đó, tốt hơn hết là ngăn chặn việc cài đặt thiết bị này cho người dùng máy tính hoặc mạng được đề cập!

Có thể ngăn người dùng bằng một walllệnh được khởi chạy cronvài phút trước khi kết thúc khung thời gian , sẽ được hiển thị trong các thiết bị đầu cuối của tất cả người dùng.

40 18 * * Mon,Tue,wed,thu,fri root echo "end of session in 5 minutes" | wall

Để ngăn người dùng GUI có thể được sử dụng thay cho lệnh wall notify-sendnằm trong gói libnotify-bin Cài đặt X

40 18 * * Mon,Tue,wed,thu,fri stone DISPLAY=:0 notify-send "end of session in 5 minutes"

Người dùng Ubuntu 11.10

Tôi đã thấy xung quanh người dùng có vấn đề với Pam và tôi đã thấy rất nhiều lỗi về điều đó vậy tại sao lại là lý do ??? Ubuntu 11.10 đơn giản như vậy không hỗ trợ GDM nữa, trình quản lý hiển thị mới là lightGDM, vấn đề là ở chỗ lưu trữ lệnh này account required pam_time.sotôi nghĩ là trong /etc/pam.d/lightdmhoặc /etc/pam.d/lightdm-autologinnhưng lỗi thế nào ???

vì vậy chỉ để xung quanh bạn có thể kiểm tra 2 tệp nhật ký LightGdm này:

  • /var/log/lightdm/lightdm.log
  • /var/log/lightdm/x-0.log

hoặc chạy LightGdm trong chế độ gỡ lỗi:

LightDM - bộ đệm

hoặc báo cáo lỗi:

ubfox-bug lightdm

Tôi báo cáo Bug ở đây để vượt qua ngón tay của bạn và chờ đợi ....


3
Đây là - wow - tuyệt vời - tôi rất ấn tượng! Đặc biệt bit thông báo rất nhiều theo ý thích của tôi vì chúng tôi không muốn con mình bị đá mà không báo trước. Điều đó quá ác ngay cả với một người cha độc ác như tôi;)
Takkat

Thật không may với lightdm điều này dường như không hoạt động ( bug.launchpad.net/lightdm/+orms/880313 ).
Takkat

wow, đó là lời giải thích dài và tuyệt vời ..
Mahmudin Ashar

Trường hợp cho openSUSE 11.4 giống hệt như Ubuntu 11.10.
Gupta

11

TimeKpr

Tôi đoán nó có mọi thứ bạn cần. Giới hạn thời gian truy cập mỗi ngày cho mỗi người dùng, dễ dàng cấu hình, bỏ qua một ngày, thêm một số "thời gian thưởng", thông báo về thời gian còn lại cho người dùng, v.v.

Trang dự án ở đây . Họ cũng có một PPA cho ubfox mà bạn có thể thêm vào Nguồn phần mềm của mình : deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main. Và cài đặt qua Trung tâm phần mềm hoặc qua CLI : sudo apt-get install timekpr.


TimeKpr có thể đặt giới hạn thời gian cho các ứng dụng riêng lẻ (như trò chơi không?)
Anderson Green

8

Timekpr

có thể được sử dụng trong 11.10 chạy LightDM để thiết lập các hạn chế cho người dùng bằng cách thêm dòng sau vào /etc/pam.d/lightdm

account required pam_time.so

Chúng tôi có thể cần xóa libpam-smbpass để cho phép người dùng chuyển đổi cho đến khi lỗi # 835 310 được khắc phục.

Tất cả các giới hạn được xác định trong cửa sổ ứng dụng hoạt động như được xác định trong GUI timekpr.

Để hiển thị biểu tượng ứng dụng khách thời gian trong Unity, chúng ta cần lập danh sách trắng 'timekpr' trong cài đặt bảng Unity và ngoài ra, chúng ta cần thêm Unityvào dòng sau trong /etc/xdg/autostart/timekpr-client.desktop:

OnlyShowIn=GNOME;XFCE;KDE;Unity;

Để bắt đầu đếm ngược thời gian được cấp, chúng tôi có thể phải bắt đầu trình nền thời gian với

/etc/init.d/timekpr start

cho 14.04:

Một thông cáo / nĩa mới hơn của timekpr được công bố cho Ubuntu 14.04 bởi Eduards Bezverhijs trong mình ppa:mjasnik/ppa.


Tuyệt vời nhưng tôi nghĩ là một giải pháp tạm thời ... bởi vì bạn đang sử dụng timepkr và samba cùng một lúc để chia sẻ với các máy tính khác (xem ClaudeD (claude-d) đã viết) về lỗi có thể ....
hhlp

7

Tự động đăng xuất là cực kỳ bực bội nếu bạn đang ở giữa một cái gì đó. Nó bạo lực, tàn bạo, thô lỗ. Và nó không quan trọng bạn bao nhiêu tuổi. Đó là một điều khi bạn chỉ nghiện máy tính và nó rất khác khi bạn theo dõi thời gian và bị đuổi ra 5 giây trước khi bạn có thể nhấp vào nút gửi đó hoặc lưu tài liệu của mình. Tôi khuyên bạn nên cân nhắc sử dụng tự động nhắc nhở thay vì tự động đá. Điều đó sẽ dạy con bạn tôn trọng lẫn nhau và cho phép nhau sử dụng máy tính một cách tự nguyện.

Thậm chí còn có một sự thay thế nhẹ hơn. Bắt đầu bằng cách theo dõi lượng thời gian mà mỗi đứa trẻ dành cho máy tính và cung cấp dữ liệu thu thập được cho tất cả chúng để chúng có thể nhìn thấy. Điều cực kỳ đơn giản này (áp dụng cho băng thông internet đã chi) đã cứu mạng tôi khi tôi là quản trị viên mạng trong một văn phòng đầy người lớn. Số liệu thống kê công khai về mức độ sử dụng băng thông cho mỗi máy tính (chỉ số lượng byte, không phải thông tin từ hóa như danh sách các trang web đã truy cập, v.v.) đã chuyển tình huống từ "tôi - quản trị viên tham lam độc ác chống lại họ - những người dùng văn phòng bị lạm dụng nghèo nàn" thành "người đàn ông, bạn đã tải xuống gấp 5 lần tôi, điều đó thật tệ! " "Xin lỗi, tôi đã tải xuống thực sự, tôi đã xem rất nhiều youtube trong giờ nghỉ trưa, sẽ không làm điều đó nữa với tốc độ này" - Tôi chỉ đơn giản là bị loại khỏi kịch bản đối đầu.


6

Tôi đã có vấn đề này quá. Vì vậy, tôi đã viết kịch bản kidtimer, cho phép bạn xác định thời gian sử dụng và tổng số. Dự án có thể được tìm thấy trên Github tại địa điểm sau:

Đây là cách cài đặt và sử dụng nó:

  1. Sao chép và dán mã vào một tệp gọi là kidtimer.install.

    #!/bin/bash
    # Restrict kids computer access to specific hours and total time.
    # By: Michael Groves - grover66_at_gmail_dot_com
    
    #variables
    basedir="/usr/local/kidtimer"
    configdir="/etc/kidtimer"
    Cdate=`/bin/date | awk '{ print $2" "$3 }'`
    TUI=0
    HOUR=`/bin/date +%H`
    DOW=`/bin/date +%u`
    WEEKEND="no"
    [ "$DOW" == "6" ] && WEEKEND="yes"
    [ "$DOW" == "7" ] && WEEKEND="yes"
    
    #arguments
    [ $# -eq 0 ] && TUI=1
    [ $# -eq 1 ] && COMMAND=$1
    [ $# -eq 2 ] && COMMAND=$1 && KID=$2
    [ $# -eq 3 ] && COMMAND=$1 && KID=$2 && Time=$3
    
    ################# Subroutines ##################
    ################################################
    
    go_check_install () {
    if [ ! -e $basedir ]; then
        go_initialize
    fi
    }
    
    
    go_initialize () {
    /bin/mkdir -p $basedir/time
    /bin/mkdir -p $basedir/schedule
    /bin/cp $0 /usr/local/bin/kidtimer && chmod +x /usr/local/bin/kidtimer
    echo "0 * * * *     root    /usr/local/bin/kidtimer hourly" > /etc/cron.d/kidtimer
    echo "0 0 * * *     root    /usr/local/bin/kidtimer daily" >> /etc/cron.d/kidtimer
    echo "* * * * *     root    /usr/local/bin/kidtimer check" >> /etc/cron.d/kidtimer
    echo "@reboot       root    /usr/local/bin/kidtimer daily" >> /etc/cron.d/kidtimer
    echo "@reboot       root    /usr/local/bin/kidtimer hourly" >> /etc/cron.d/kidtimer
    /bin/mkdir $configdir
    /usr/bin/touch $configdir/kid.list
    go_create_message_files
    echo "Kidtimer is now installed. Run /usr/local/bin/kidtimer to configure."
    }
    
    
    go_create_message_files () {
    cat << EOF > $basedir/send5.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
        /usr/share/pixmaps/gnome-set-time.png "ALERT" \
        "You will be logged out in 5 minutes."' \$Name
    EOF
    chmod +x $basedir/send5.sh
    cat << EOF > $basedir/send4.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 4 minutes."' \$Name
    EOF
    chmod +x $basedir/send4.sh
    cat << EOF > $basedir/send3.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 3 minutes."' \$Name
    EOF
    chmod +x $basedir/send3.sh
    cat << EOF > $basedir/send2.sh
    #!/bin/bash
    Name=$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 2 minutes."' \$Name
    EOF
    chmod +x $basedir/send2.sh
    cat << EOF > $basedir/send1.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 1 minute."' \$Name
    EOF
    chmod +x $basedir/send1.sh
    cat << EOF > $basedir/logout.sh
    #!/bin/bash
    Name=\$1
    /usr/bin/pkill -KILL -u \$Name
    rm -rf /tmp/kidtimer.shutdown.\$Name
    EOF
    chmod +x $basedir/logout.sh
    cat << EOF > $basedir/schedule/blank
    #hour weekday weekend (y/n)
    00 n n
    01 n n
    02 n n
    03 n n
    04 n n
    05 n n
    06 n n
    07 n n
    08 y y
    09 y y
    10 y y
    11 y y
    12 y y
    13 y y
    14 y y
    15 y y
    16 y y
    17 y y
    18 y y
    19 y y
    20 n n
    21 n n
    22 n n
    23 n n
    #minutes weekday weekend
    MAX 120 240
    EOF
    }
    
    
    go_check () {
    for I in `cat $configdir/kid.list`; do
            /usr/bin/users | grep -q $I
            if [ $? -eq 0 ]; then
                    if [ -e $basedir/time/$I.ttl ]; then
                            C=`cat $basedir/time/$I.ttl`
                            C=$((C + 1))
                            echo $C > $basedir/time/$I.ttl
                    else
                            echo 1 > $basedir/time/$I.ttl
                            C=1
                    fi
            else
            go_clean_jobs $I
            exit 0
        fi
            # check total time.
            W="no"
            [ $DOW -eq 6 ] && W="yes"
            [ $DOW -eq 7 ] && W="yes"
            [ "$W" == "no" ] && TIME_LIMIT=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $2 }'`
            [ "$W" == "yes" ] && TIME_LIMIT=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $3 }'`
            if [ $C -ge $TIME_LIMIT ]; then
                    if [ ! -e /tmp/kidtimer.shutdown.$I ]; then
                            /usr/bin/passwd $I -l
                            go_logout $I
                    fi
            fi
    done
    }
    
    
    go_clean_jobs () {
    K=$1
    for I in `/usr/bin/atq | awk '{ print $1 }' | sort`; do
        /usr/bin/at -c $I | grep kidtimer | grep -q $K
        [ $? -eq 0 ] && /usr/bin/at -d $I
    done
    [ -e /tmp/kidtimer.shutdown.$K ] && rm -rf /tmp/kidtimer.shutdown.$K
    }
    
    
    go_daily () {
    for I in `cat $configdir/kid.list`; do
        ls -l $basedir/time/$I.ttl | grep -q "$Cdate"
        if [ ! $? -eq 0 ]; then
            echo "0" > $basedir/time/$I.ttl
        fi
    done
    }
    
    
    go_hourly () {
    if [ -s $configdir/kid.list ]; then
        for I in `cat $configdir/kid.list`; do
            if [ -e $basedir/schedule/$I ]; then
                [ "$WEEKEND" == "no" ] && TL=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $2 }'`
                [ "$WEEKEND" == "yes" ] && TL=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $3 }'`
                [ -e $basedir/time/$I.ttl ] && C=`cat $basedir/time/$I.ttl`
                [ $C -ge $TL ] && /usr/bin/passwd $I -l && exit 0
                [ "$WEEKEND" == "no" ] && R=`grep ^$HOUR $basedir/schedule/$I | awk '{ print $2 }'`
                [ "$WEEKEND" == "yes" ] && R=`grep ^$HOUR $basedir/schedule/$I | awk '{ print $3 }'`
                if [ "$R" == "y" ]; then
                    /usr/bin/passwd $I -u
                else
                    /usr/bin/passwd $I -l
                    /usr/bin/users | grep -q $I && /usr/local/bin/kidtimer shutdown $I
                fi
            fi
        done
    fi
    }
    
    
    go_logout () {
    K=$1
    echo "$basedir/send5.sh $K" | at now + 1 minutes
    echo "$basedir/send4.sh $K" | at now + 2 minutes
    echo "$basedir/send3.sh $K" | at now + 3 minutes
    echo "$basedir/send2.sh $K" | at now + 4 minutes
    echo "$basedir/send1.sh $K" | at now + 5 minutes
    echo "$basedir/logout.sh $K" | at now + 6 minutes
    touch /tmp/kidtimer.shutdown.$K
    }
    
    
    go_addtime () {
    U=$KID
    A=$Time
    if [ "$KID" == "reset" ]; then
        echo "0" > $basedir/time/$U.ttl
        echo "Done."
        exit 0
    elif [ "$KID" == "" ]; then
        echo "Error."
        echo "Syntax: addtime <user> <minutes|reset>"
        exit 1
    else    
        C=`cat $basedir/time/$KID.ttl`
        C=$((C - Time))
        echo $C > $basedir/time/$KID.ttl
        echo "New total minutes is "$C"."
        echo "Done."
    fi
    
    /usr/bin/passwd $KID -u
    }
    
    
    go_tui () {
    go_command_list
    echo -n "Choose: "; read -e X
    case "$X" in
    1) go_setup_user
            ;;
    2) go_modify_user
            ;;
    3) go_remove_user
            ;;
    4) go_list_users
        ;;
    5) exit 0
            ;;
    esac
    go_tui
    }
    
    
    go_command_list () {
    echo
    echo "1) Setup user limits."
    echo "2) Modify user limits."
    echo "3) Remove user limits."
    echo "4) List configured users."
    echo "5) Quit."
    echo
    }
    
    
    go_list_users () {
    echo
    echo "Users configured for kidtimer:"
    if [ -s $configdir/kid.list ]; then
        cat $configdir/kid.list
    else
        echo "No configured users."
    fi
    }
    
    go_setup_user () {
    echo
    echo -n "Username: "; read -e U
    /usr/bin/id $U > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        /bin/cp $basedir/schedule/blank $basedir/schedule/$U
        echo "0" > $basedir/time/$U.ttl
        echo $U >> $configdir/kid.list
        echo "Done."
        echo
        echo -n "Modify limits now ?(y/n): "; read -e M
        if [ "$M" == "y" ]; then
            if [ -e /usr/bin/nano ]; then
                        /usr/bin/nano $basedir/schedule/$U
                        echo "Done."
                else
                        /usr/bin/vi $basedir/schedule/$U
                        echo "Done."
                fi
        fi
    else
        echo "Error. User does not exist. Please create user using the useradd command first."
    fi
    }
    
    
    go_modify_user () {
    echo
    echo -n "Username: "; read -e U
    grep -q ^$U $configdir/kid.list
    if [ $? -eq 0 ]; then
        if [ -e /usr/bin/nano ]; then
            /usr/bin/nano $basedir/schedule/$U
            echo "Done."
        else
            /usr/bin/vi $basedir/schedule/$U
            echo "Done."
        fi
    else
        echo "Error. User not setup. Please setup user first."
    fi
    }
    
    
    go_remove_user () {
    echo
    echo -n "Username: "; read -e U
    grep -q ^$U $configdir/kid.list
    if [ $? -eq 0 ]; then
        grep -v ^$U $configdir/kid.list > /tmp/kidtimer.tmp
        cat /tmp/kidtimer.tmp > $configdir/kid.list
        echo "Done."
    else
        echo "Error. User is not setup."
    fi
    }
    
    
    go_help () {
    echo
    echo "Commands:"
    echo "--------------------------------------------------------------------------------"
    echo "addtime <user> <minutes> ... Increases allowed time for the day."
    echo "logout <user>            ... Starts logout sequence for user."
    echo "hourly                   ... Enables/disables user access based on the schedule."
    echo "daily                    ... Resets time for the new day."
    echo "help                     ... This list."
    echo "--------------------------------------------------------------------------------"
    }
    
    ###################### Code ####################
    ################################################
    
    go_check_install
    [ $TUI -eq 1 ] && go_tui
    
    case "$COMMAND" in
    addtime) go_addtime
        ;;
    logout) go_logout $KID
        ;;
    initialize) go_initialize
        ;;
    hourly) go_hourly
        ;;
    daily) go_daily
        ;;
    check)  go_check
        ;;
    -h) go_help
        ;;
    help) go_help
        ;;
    esac
    exit 0
  2. Thực hiện nó:

    sudo ./kidtimer.install
  3. Chạy nó:

    sudo kidtimer
  4. Thiết lập tài khoản người dùng hiện có.

  5. Làm xong.

Để được giúp đỡ:

sudo kidtimer help

Thêm thời gian vào tài khoản của người dùng (chỉ trong ngày hôm đó):

sudo kidtimer addtime user minutes

Đặc trưng:

  • Cho phép con bạn giờ cụ thể trong ngày để truy cập vào máy tính, cả ngày trong tuần và cuối tuần.
  • Đặt lượng thời gian tối đa, cả ngày trong tuần và cuối tuần.

Các tệp chính:

/etc/kidtimer/kid.list
/etc/cron.d/kidtimer
/usr/local/kidtimer/schedule/<user>
/usr/local/kidtimer/time/<user>.ttl
/usr/local/bin/kidtimer

Cronjobs:

  • Kiểm tra mỗi phút để xem người dùng có đăng nhập không. Nếu vậy, hãy tăng tổng thời gian. Nếu đạt thời gian tối đa, hãy vô hiệu hóa tài khoản và bắt đầu chuỗi đăng xuất (tổng cộng 5 phút).
  • Kiểm tra hàng giờ để xem người dùng có được phép đăng nhập không. Nếu vậy, kích hoạt tài khoản.
  • Vào nửa đêm, thiết lập lại thời gian.

Ghi chú:

Ứng dụng sử dụng notify-sendđể cảnh báo thời gian người dùng sắp hết. Khi hết thời gian, tất cả các quy trình người dùng bị chấm dứt, vì vậy hãy chuẩn bị người dùng.


5

timekpr - Chương trình này sẽ theo dõi và kiểm soát việc sử dụng máy tính của các tài khoản người dùng của bạn. Bạn có thể giới hạn mức sử dụng hàng ngày của họ dựa trên thời lượng truy cập được định thời gian và định cấu hình các khoảng thời gian trong ngày khi họ có thể hoặc không thể đăng nhập. Với ứng dụng này, quản trị viên có thể giới hạn thời gian đăng nhập tài khoản hoặc giờ truy cập tài khoản. Ứng dụng này hoạt động như một kiểm soát thời gian của cha mẹ và sẽ hữu ích cho các bậc cha mẹ muốn giới hạn thời gian truy cập của trẻ.

Even Nedberg proposed the following answer:
Just started copying into the 11.10 version for the PPA. Should finish
in a few minutes.

Bạn có thể cập nhật hệ thống của mình với các gói không được hỗ trợ từ PPA không đáng tin cậy này bằng cách thêm ppa:timekpr-maintainers/ppavào Nguồn phần mềm của hệ thống.

deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main 
deb-src http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main 

Gói này có sẵn trong:

VẤN ĐỀ :

Tôi báo cáo Bug ở đây để vượt qua ngón tay của bạn và chờ đợi ....


Oh đó là tin tốt. Chúng tôi đã từng sử dụng timekpr ở đây. Hy vọng nó sẽ hoạt động - nó vẫn được cài đặt trên hộp 11.10 của tôi, chạy tốt nhưng không khóa tài khoản của con tôi.
Takkat

và cho 14.04 nó có hoạt động không?
rogerdpack

3

Giới thiệu

Chúng tôi có thể kiểm tra nếu người dùng đăng nhập bằng lệnh:

who -u

cung cấp cho chúng ta một đầu ra như:

$ who -u
jacob    :0           2016-03-17 20:48   ?          2557 (:0)
newuser  :1           2016-03-17 20:50   ?          4466 (:1)

Trong đầu ra, chúng tôi nhận được thông tin của người dùng được nhắm mục tiêu, điều đó cần phải được dừng lại nếu thời gian vượt quá giới hạn.

Giải pháp

Giả sử người dùng của bạn không có sudođặc quyền:

Giải pháp này là một kịch bản nền nhỏ. Nó giới hạn mức sử dụng mỗi ngày ở một số phút xác định, để đặt vào phần đầu của tập lệnh. Sau khi thiết lập (không quá khó), nó sẽ chạy rất dễ dàng và không cần thực hiện thêm hành động nào sau đó.

Để tránh mất dữ liệu không mong muốn của các tệp có thể mở, 60 giây trước khi hết thời gian giới hạn của người dùng được nhắm mục tiêu, một thông báo sẽ xuất hiện trên người anh ấy DISPLAY:

nhập mô tả hình ảnh ở đây

Kịch bản

#!/usr/bin/python3
import subprocess
import os
import sys
import time


#--- set the time limit below (minutes)
minutes = 120
#--- set the user name to limit below
user = "newuser"

uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"

def read(f):
    try:
        return int(open(f).read().strip())
    except FileNotFoundError:
        pass

def message(disp, user):
    return "DISPLAY="+disp+" su - "+user+" -c "+'"'+\
      "notify-send 'User "+user+\
      " will be logged off in 60 seconds'"+'"'


currday1 = read(datefile)

while True:
    time.sleep(10)
    currday2 = int(time.strftime("%d"))
    # check if the day has changed, to reset the used quantum
    if currday1 != currday2:
        open(datefile, "wt").write(str(currday2))
        try:
            os.remove(uselog)  
        except FileNotFoundError:
            pass
    # if the pid of the targeted process exists, add a "tick" to the used quantum
    check = subprocess.check_output(["who", "-u"]).decode("utf-8")
    pid = [l.split() for l in check.splitlines() if user in l]
    if pid:
        n = read(uselog)
        n = n + 1 if n != None else 0
        open(uselog, "wt").write(str(n))
        # when time exceeds the permitted amount, kill the process
        if n > minutes*6:
            disp = [d for d in [d[1] for d in pid] if all([":" in d, not "." in d])][0]
            subprocess.Popen(["/bin/bash", "-c", message(disp, user)])
            time.sleep(60)
            pids = [p[-2] for p in pid]
            for p in pids:
                subprocess.Popen(["kill", p])  

    currday1 = currday2

Cách sử dụng

  1. Trên máy tính để bàn của bạn (hoặc bất cứ nơi nào khác), tạo một thư mục có tên: limit
  2. Sao chép tập lệnh vào một tệp trống, lưu nó dưới dạng limit_use(không có phần mở rộng) trong thư mụclàm cho nó có thể thực thi được
  3. Chỉnh sửa trong phần đầu của tập lệnh tên người dùng để giới hạn và số phút tối đa được phép. Trong ví dụ:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the user name to limit below
    user = "jacob"
  4. Sao chép thư mục vào thư mục /opt:

    cp -r /path/to/limit /opt
  5. Bây giờ chỉnh sửa /etc/rc.localđể làm cho kịch bản chạy nó như khi rootkhởi động:

    sudo -i gedit /etc/rc.local

    Ngay trước dòng

    exit 0

    một dòng khác:

    /opt/limit/limit_use &

Giải trình; làm thế nào nó hoạt động

  • Cứ sau 10 giây, tập lệnh sẽ xem liệu người dùng được nhắm mục tiêu đã đăng nhập. Nếu vậy, nó "thêm" một "điểm" vào tổng mức sử dụng, sẽ được ghi lại trong một tệp ( /opt/limit/uselog). Nếu đạt đến giới hạn hàng ngày, tập lệnh không còn cho phép người dùng đăng nhập, sẽ giết quá trình của nó nếu nó tồn tại.
  • Vào ngày thay đổi (ngày được ghi trong một tệp, vì vậy khởi động lại sẽ không giúp ích), tệp nhật ký sẽ bị xóa, cho phép tạo ra một lượng thời gian sử dụng mới.
  • Vì tập lệnh chạy khi khởi động , rc.localchỉ từ (các) người dùng có đặc quyền sudo mới có thể dừng tập lệnh, ngay cả khi người dùng biết tên quy trình.

Dừng kịch bản

Trong trường hợp bạn muốn dừng tập lệnh, hãy sử dụng lệnh:

sudo kill "$(pgrep limit_use)"

Nhưng bạn cần mật khẩu sudo để làm như vậy.


2

Tôi đã thử timekprnhưng không được. Sau đó thực hiện một biến thể của nó hoạt động trên Ubuntu của tôi. Đây là những gì người ta cần làm cho biến thể này:

  1. Thêm giới hạn thời gian trong /var/lib/timelimit/user_to_be_limited.limittệp chỉ với quyền root. ví dụ: 1800 trong 1800 giây (30 phút) giới hạn hàng ngày.

  2. Tạo /usr/local/bin/timelimit.shvới quyền root bằng cách sau:

    #!/bin/bash
    
    pollTime=30
    export DISPLAY=:0
    
    while(true); do
        sleep $pollTime
        usersLogedIn=$( users|sed -e 's/\s\+/\n/g'|sort|uniq )
        for userName in $usersLogedIn; do
            if [[ -e "/var/lib/timelimit/$userName.limit" ]]
            then
                if [[ ! -e "/var/lib/timelimit/$userName.time" || `( stat -c '%z'  /var/lib/timelimit/$userName.time|cut -c9,10 )` != `date +%d` ]]
                then 
                    echo $pollTime > /var/lib/timelimit/$userName.time
                else
                    timeUsed=$(( `cat /var/lib/timelimit/$userName.time` + $pollTime ))
                    echo $timeUsed > /var/lib/timelimit/$userName.time
                fi
                if [[ `cat /var/lib/timelimit/$userName.time` -gt `cat /var/lib/timelimit/$userName.limit` ]]
                then
                    export XAUTHORITY=/home/$userName/.Xauthority
                    notify-send --icon=gtk-dialog-warning --urgency=critical -t 30000 "$userName" "You have 60 seconds left!"
                    sleep 60
                    pkill -u $userName
                fi
            fi
        done
    done
  3. Thêm vào /etc/rc.local:

    sudo /usr/local/bin/timelimit.sh &
  4. Khởi động lại Ubuntu


2

Tôi chỉ cần thực hiện một câu trả lời có sẵn một cách dễ dàng. Mã được giải thích trên chuỗi http://forums.linuxmint.com/viewtopic.php?f=213&t=77687 . Tóm lại: một giới hạn được định cấu hình trong vài phút mỗi ngày, một công việc định kỳ mỗi phút, một thông báo cho người dùng để thông báo cho anh ta và đăng xuất bắt buộc.

Để tải xuống và cài đặt cái này, hãy mở Terminal và chạy các lệnh bên dưới:

cd /tmp/
git clone https://github.com/Thomas-Baeckeroot/ParentalControl.git
cd ParentalControl/
./install.sh

Mật khẩu quản trị viên sẽ được yêu cầu trong quá trình cài đặt (để cài đặt công việc định kỳ, để sao chép tập lệnh, Tập). Từ đó bạn sẽ được hướng dẫn cho tất cả. Ngoài ra còn có một ./uninstall.sh tại cùng một nơi chỉ trong trường hợp. Nó được xây dựng để hoạt động với tất cả các bản phân phối dựa trên Ubuntu (Mint, v.v. Có lẽ tất cả các debian cũng vậy). Nếu có bất kỳ vấn đề nào xảy ra, vui lòng cho tôi biết, bao gồm cả phiên bản hệ thống và môi trường đồ họa trong các bình luận:

uname -a
echo $XDG_CURRENT_DESKTOP

Thomas Baeckeroot


1

Tôi vừa phát hành phiên bản beta của ứng dụng mới LittleBrothercó khả năng theo dõi thời gian phát trên các máy Linux. Người dùng thử nghiệm được hoan nghênh dùng thử gói Debian. Hướng dẫn về cách tải xuống và sử dụng nó có thể được tìm thấy ở đây: https://github.com/marcus67/little_brother . Việc cài đặt có thể vẫn còn một chút khó khăn, mặc dù. Đây là các tính năng của ứng dụng:

  • Bất kỳ số lượng người dùng có thể được theo dõi.
  • Mỗi người dùng có thể có một bộ quy tắc cụ thể xác định thời gian chơi được phép.
  • Các quy tắc có thể được điều chỉnh theo "bối cảnh", chẳng hạn như ngày trong tuần và / hoặc lịch nghỉ hè (hiện tại chỉ có lịch trình của Đức được hỗ trợ).
  • Thời gian chơi có thể được giới hạn trong một cửa sổ thời gian (từ, đến).
  • Thời gian chơi tối đa mỗi ngày có thể được xác định.
  • Người dùng có thể bị buộc phải nghỉ sau một thời gian phiên tối đa nhất định.
  • Người dùng có thể bị buộc phải chờ thời gian nghỉ tối thiểu sau khi hoạt động.
  • Bất kỳ số lượng máy chủ Linux nào cũng có thể được giám sát (hiện tại điều này yêu cầu người dùng phải có cùng thông tin đăng nhập trên tất cả các máy).
  • Có một máy chủ chính có lịch sử hoạt động của tất cả người dùng. Máy chủ chính này kiểm tra các bộ quy tắc và nhắc máy chủ lưu trữ kết thúc các tiến trình nếu được yêu cầu.
  • Máy chủ chính cung cấp giao diện web đơn giản để xem hoạt động của người dùng trong khoảng thời gian lịch sử được định cấu hình (ví dụ 7 ngày) và trang quản trị để tự động xác định ngoại lệ quy tắc cho số ngày được định cấu hình trong tương lai.
  • Ứng dụng web có thể được chạy phía sau proxy để có thể truy cập từ xa cho phép quản trị từ xa sau khi nhận được cuộc gọi từ người dùng trẻ xin thêm thời gian chơi.
  • Ứng dụng này có hỗ trợ ngôn ngữ quốc tế. Hiện tại bản dịch tiếng Anh và tiếng Đức được cung cấp. Người dùng được mời để cung cấp bản dịch cho các ngôn ngữ khác.
  • Ứng dụng sử dụng tạo giọng nói để thông báo cho người dùng về việc đăng xuất bắt buộc. Ngoài ra những tin nhắn nói được quốc tế hóa.
  • Ngoài thời gian dành cho máy chủ Linux, ứng dụng cũng có thể theo dõi thời gian hoạt động trên các thiết bị khác như điện thoại thông minh hoặc bảng. Nó lợi dụng thực tế là hầu hết các hệ điều hành hiện đại đều đặt các thiết bị ở một chế độ tiết kiệm năng lượng nào đó trong khi chúng không được sử dụng. Bằng cách này, phản hồi mạng (bằng cách ping) có thể được sử dụng để xác định hoạt động trên các thiết bị đó. Ngược lại với các máy chủ Linux, ứng dụng sẽ không thể chấm dứt hoạt động. Tuy nhiên, thời gian chơi sẽ được thêm vào thời gian chơi chung và do đó sẽ có tác động đến thời gian cho phép và cả quy tắc thời gian nghỉ trên máy chủ Linux.

Một số ảnh chụp màn hình:

Trang trạng thái Trang quản trị

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.