Почему мы используем команду sleep перед xset dpms?
У меня есть следующая строка, чтобы выключить дисплей моего ноутбука:
sleep 1 && xset dpms force standby
sleep 1
: Устанавливает нить на 1 секунду.
xset dpms force standby
От мужчины переводит флаг dpms в режим ожидания.
Когда я опускаю sleep 1
команда, xset
Команда переводит компьютер в режим ожидания на 1 секунду, а затем автоматически возобновляет нормальную работу. Но в сочетании с sleep 1
Эта команда переводит компьютер в режим ожидания на неопределенный срок, пока не будет обнаружен ввод пользователя.
Можете ли вы объяснить взаимосвязь между этими двумя командами и почему она работает таким образом?
2 ответа
Когда вы запускаете команду, происходит два события: "KeyPress" и "KeyRelease".
Поэтому, когда вы запускаете эту команду нажатием кнопки Enter.
xset dpms force standby
Сначала происходит "KeyPress", это приводит к немедленному запуску команды и переводит монитор в спящий режим, когда вы отпускаете клавишу Enter, затем происходит "KeyRelease", и это действие пользователя, поэтому монитор возвращается к работе.
Если вы выполняете работу очень быстро (нажимая клавишу Enter и анализируя ее перед выполнением команды), ваш монитор остается в "спящем" состоянии.
Чтобы проверить это, установите x11-xserver-utils
пакет.
sudo apt install x11-xserver-utils
тогда беги xev
,
Теперь нажмите Enter, чтобы увидеть, что происходит; Вы должны увидеть что-то более или менее похожее на:
KeyPress event, serial 48, synthetic NO, window 0x2600001,
...
KeyRelease event, serial 48, synthetic NO, window 0x2600001,
...
Итак, мы используем sleep
чтобы убедиться, что оба этих события происходят перед выполнением команды.
Я думаю, что это, вероятно, связано с тем, что система считает "пользовательской активностью".
Если система обнаруживает активность клавиатуры, она возвращается из спящего режима. Тот факт, что вы нажимаете клавишу ВВОД, чтобы отправить команду принудительного режима ожидания, считается некоторым "текущим" действием, и поэтому он немедленно отключается.
Sleep 1 гарантирует, что клавиатура не записала активность в течение 1 секунды перед отправкой команды sleep, поэтому переход в режим ожидания продолжается.