나는 Salt를 통해 내 아이들의 컴퓨터에 배포할 스크립트를 만들었습니다. 스크립트는 허용된 근무 시간을 구현하고 제대로 작동하지만 제 자녀 중 한 명이 이 문제를 해결할 수 있는 방법을 찾았는데 해결 방법을 모르겠습니다.
나는 timekpr을 사용해왔지만 중앙에서 제어할 수 있는 것을 찾고 있습니다. 나는 또한 timekpr이 잠겨 있는 동안 실행 중인 작업을 계속하는 것을 방지한다는 것을 발견했습니다.
아이들의 컴퓨터는 비밀번호 없는 로그인을 위해 완전히 패치된 Xubuntu 15.04를 실행하고 있습니다(비밀번호가 있지만 알 필요는 없습니다).
스크립트가 세션을 잠그기 전에 프로그램 메뉴에서 자물쇠를 클릭하여 수동으로 화면을 잠그면 사용자 계정이 만료된 상태라도 세션을 잠금 해제할 수 있습니다. 예상되는 동작이 복원되기 전에 이 작업은 한 번만 수행할 수 있습니다.
이것은 내 스크립트입니다.
#!/bin/bash
users[0]='child1'
users[1]='child2'
users[2]='child3'
lock[0]=1930
lock[1]=1930
lock[2]=1930
unlock[0]=1300
unlock[1]=1300
unlock[2]=1300
# clean up at AT jobs that may already exist
for i in `atq | cut -f1`;
do
if at -c $i | grep -q '^/root/userRestrictions.sh$'
then
atrm $i
fi
done
currTime=`date +%k%M`
for i in {0..2}
do
if id -u "${users[i]}" >/dev/null 2>&1; then
# username exists
if [ "$currTime" -ge ${unlock[i]} ] && [ "$currTime" -lt ${lock[i]} ]; then
# current time is between unlock and lock time
# unlock the users account
/usr/bin/chage -E -1 ${users[i]}
# run this script again at the lock time
atHour=$(( ${lock[i]} / 100 ))
# extract minutes and pad with zeros
atMinute=$(( ${lock[i]} % 100 ))
atMinute=`printf %02d $atMinute`
echo "/root/userRestrictions.sh" | at "$atHour:$atMinute"
else
# current time is after lock time or before unlock time
# lock the users account
/usr/bin/chage -E 0 ${users[i]}
# lock screen if the user is logged in at all
if w | cut -d " " -f1 | grep -Fxq "${users[i]}"
then
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 dm-tool lock
fi
# run this script again at the unlock time
atHour=$(( ${unlock[i]} / 100 ))
# extract minutes and pad with zeros
atMinute=$(( ${unlock[i]} % 100))
atMinute=`printf %02d $atMinute`
echo "/root/userRestrictions.sh" | at "$atHour:$atMinute"
fi
fi
done