20140718

xlock, mplayer и dpms

уж несколько лет наблюдаю одну маленькую проблему:
если запущен mplayer на воспроизведение видео (даже когда стоит на паузе), то не удаётся заблокировать экран.

так как всякими гномями-кадэями я не пользуюсь, а в качестве wm-а у меня стоит скромно-спартанский icewm, то приходится для блокировки экрана использовать программу xlock из пакета xlockmore (в icewm нет собственного встроенного блокировщика).

а пакет этот уж много лет отсутствует в репозиториях и все на него забили.
вот даже баг-репорт есть ровнёхонько про мою проблему: https://bugs.debian.org/156769

и самое противное — если вдруг попытаешься заблокировать экран при включённом mplayer-е, то, даже после закрытия его окна, заблокировать экран уже не получается пока x-сервер не перезапустишь.

за годы я уже привык «контролировать ситуацию», и, если хочу заблокировать экран, вспоминаю, не оставил ли случайно запущенный mplayer (благо, я видео смотрю очень редко).

а вот сегодня меня это как-то особенно «достало», и захотелось от этой проблемы избавиться.

логические рассуждения подсказывали лишь о каких-нибудь фантомных процессах, чему-то там мешающих. это я уже проходил, впервые столкнувшись с данным багом: нету таких процессов.

помогло вдумчивое медитирование над выводом xlock:

X Error of failed request: BadMatch (invalid parameter attributes)
 Major opcode of failed request: 131 (DPMS)
 Minor opcode of failed request: 6 (DPMSForceLevel)
 Serial number of failed request: 443
 Current serial number in output stream: 446


dpms. не тут ли собака порылась?

запрос «xlock dpms»  дал нужное! команда
$ xset q
без mplayer-а в «рабочем состоянии» показывает, что dpms включен.
а при запущенном mplayer-е (с видеороликом) — показывает, что выключен.

сразу нашлась и конфигурационная опция у mplayer-а:
-nostop-xscreensaver

или в конфигурационном файле ~/.mplayer/config:
stop-xscreensaver=no


ну а если всё-таки хочется, чтобы при запуске mplayer-а dpms всё-таки отключался (и экран, соответственно, не гас после dmps-интервала), то вместо этой опции можно восстанавливать dpms, если вдруг опять собъётся:
$ xset +dpms


вот такие пироги.
и чего я столько лет мучался?

Комментариев нет: