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