Простой скринсейвер для Линукса

Xscreensaver – хорошая прога и во многом отвечает требованиям, но у нее есть одна дурацкая особенность – запаролевать экран при пробуждении из спящего режима. А спросонья тыкать негнущимися пальцами, не помня какой язык ты вчера оставил на клавиатуре или случайно нажал Caps Lock, не особенно и приятно. Где эту фичу отключить, я не нашел. Наверное, она вкомпелированна прямо в двоичный код.

Однако на Линуксе скринсейвер не особо и нужен, поскольку Xorg располагает встроенным скринсейвером, который просто выключает экран командой

xset s blank ; sleep 1 ; xset s activate

Для автоматического выключения экрана остается только задать время неактивности юзера, например 10 минут.

Для этого мы установим прогу xprintidle, которая в миллисекундах и считывает время простоя пользователя. 1 минута = 60000 миллисекунд.

sudo apt-get install xprintidle

А дальше я написал на Python простой скрипт

screensaver.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
# -*- coding: utf-8 -*-
#---------------------------

#inactivity = 60000	# 1 min
#inactivity = 300000	# 5 min
inactivity = 600000	# 10 min

# 1 min = 60000 milliseconds
#---------------------------

import subprocess


idletime = subprocess.Popen( 'xprintidle', stdout=subprocess.PIPE ).communicate()[0]
		
if int(idletime) >= inactivity:
	print 'Screen OFF!'
	subprocess.call(["xset", "s", "blank"])
	subprocess.call(["sleep", "1"])
	subprocess.call(["xset", "s", "activate"])
else:
	print 'Idle', str(idletime).replace('\n',''), 'msec'

 

10 минут простоя пользователя откомментированы на линии 7. Вы можете задать свое время.

Теперь поместим файл screensaver.py в папку /opt, дадим ему разрешение x и сделаем для него кронджоб на запуск каждую минуту

chmod a+x /opt/screensaver.py
crontab -e

*/1 * * * * DISPLAY=:0 /opt/screensaver.py

Инжой!