Đây là cách tôi giải quyết vấn đề của mình (điều này sẽ đăng xuất một người dùng nhàn rỗi sau ít nhất 30 phút trong thời gian rảnh):
Trước tiên hãy tạo một tệp và đặt mã này vào đó (bạn có thể cần cài đặt xprintidle trước khi bắt đầu):
#!/bin/bash
# Written by cz0 2010, adapted by dror 2013
# Distributed under the terms of the GNU General Public License v2
HALFHOUR=1800000
IDLETIME=`xprintidle`
QDBUS="/usr/bin/qdbus"
if [ $IDLETIME -gt $HALFHOUR ]
then
logger timeout of $HALFHOUR expired. idle is $IDLETIME
KDEPID=$(ps aux | grep 'startkde' | grep -v 'grep' | awk '{print $2}')
KDEUSER=$(ps u $KDEPID | grep 'startkde' | awk '{print $1}')
# If the DBUS_SESSION_BUS_ADDRESS environment variable is not already set correctly
# then set it by finding the environment file for the startkde process in proc and
# parsing it to get get the correct setting.
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
ENVIRON_FILE=/proc/$(ps h --ppid $KDEPID -o pid | awk '{print $1}')/environ
CURRENT_DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS $ENVIRON_FILE | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//')
export DBUS_SESSION_BUS_ADDRESS=$CURRENT_DBUS_SESSION_BUS_ADDRESS
fi
$QDBUS org.kde.ksmserver /KSMServer logout 1 0 2
else
logger timeout is $HALFHOUR not expired $IDLETIME
fi
Bây giờ cp nó thành / bin /
sudo cp myfile /bin/logoutonidle
Tiếp theo làm cho nó thực thi
sudo chmod +x /bin/logoutonidle
Lần chạy tiếp theo cho mỗi người dùng bạn muốn đăng xuất tự động (nếu cần thì hãy chạy nó trên mọi người dùng):
crontab -e
và thêm vào dòng sau (điều này sẽ giúp kiểm tra cron cứ sau 15 phút, vì vậy trường hợp xấu nhất là người dùng sẽ đăng xuất sau ~ 45 thời gian nhàn rỗi):
*/15 * * * * export DISPLAY=:0 && /bin/logoutonidle 2>&1
Tôi muốn cảm ơn những người trong các chủ đề này Bryan và Johanns đã chỉ cho tôi đi đúng hướng.