Почему блокировка рабочего стола перестает работать через некоторое время?

Почему блокировка рабочего стола перестает работать через некоторое время?

xautolockявно работает:

$ ps wafux | grep [x]autolock
user   21410  0.0  0.0  20124  2628 ?        S    Nov05   0:04 xautolock -time 10 -notify 30 -notifier notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds' -locker slock

Однако, когда я пытаюсьзакрой:

$ xautolock -locknow
Could not locate a running xautolock.

Если я раскручиваю еще один, xautolockто он работает:

$ xautolock -time 10 -notify 30 -notifier "notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds'" -locker slock&
[2] 18828
$ ps wafux | grep [x]autolock
user   21410  0.0  0.0  20124  2628 ?        S    Nov05   0:04 xautolock -time 10 -notify 30 -notifier notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds' -locker slock
user   18828  0.0  0.0  20124  2708 pts/1    S    08:30   0:00      \_ xautolock -time 10 -notify 30 -notifier notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds' -locker slock
$ xautolock -locknow # Runs fine and locks the desktop

Что дает?

К настоящему моменту я видел это и на моем настольном компьютере, и на ноутбуке. Обратите внимание, что по крайней мере первое время после блокировки загрузки работает нормально. Только после какого-то неизвестного времени или события он начинает давать сбои.


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

  1. Закройте крышку.
  2. Подождите, пока компьютер перейдет в режим гибернации.
  3. Откройте крышку.
  4. Нажмите кнопку питания.
  5. Введите пароль для входа, а затемEnter

и

  1. Заблокировать рабочий стол
  2. Те же шаги, что и выше

Отслеживание кода:

  1. Строка, которая выводит сообщение об ошибке:error1 ("Could not locate a running %s.\n", progName);
  2. Что происходитесли messageToSendэто правдаиtype != XA_INTEGER
  3. Это выглядит какtypeустановленв следующем заявлении:

    (void) XGetWindowProperty (d, root, semaphore, 0L, 2L, False,
                               AnyPropertyType, &type, &format,
                               &nofItems, &after,
                               (unsigned char**) &contents);
    

Означает ли это, что обнаружение пробега xautolockможет зависеть отокночто сосредоточено? Мне также интересно, может ли этот звонок быть связан с этимизвестная ошибка:

  1. Параметры -disable, -enable, -toggle, -exit, -locknow, -unlocknow и -restart зависят от доступа к X-серверу для выполнения своей работы. Это означает, что они будут приостановлены в случае, если какое-то другое приложение захватит сервер полностью для себя.

Возможно ли, что xautolockконфликтует с xss-lock, оба из которых используют slock? В дополнение к xautolockстроке выше у меня также есть этострока в .xprofile:

xss-lock slock &

Поскольку и xautolockи xss-lockмогут вызывать slock, я подозреваю, что проблема заключается в следующем:

Так как xss-lockя могу обнаружить спящий режим ноутбука, я бы хотел использовать его вместо xautolock, но, похоже, не могу заставить его xss-lockработать с notify-send.

решение1

Для меня процесс xautolock все еще работал в фоновом режиме, но не слушал никаких xautolock -locknowкоманд. Как сказал @jrm,приложение должно подавлять «заставку». У нас обоих это произошло из-за того, что mpv (видеоплеер) отключил заставку.

Для mpv исправление заключается в добавлении следующего в ~/.config/mpv/configor ~/.mpv/config:

stop-screensaver=no

Если вы не используете mpv, это может быть другое приложение, отключающее заставку. Попробуйте некоторые из наиболее часто используемых, чтобы узнать, какое из них это.


Если вы хотитепредотвратить автоматическую блокировку экрана во время воспроизведения видео, одним из распространенных способов является использование функции «углов» xautolock:

xautolock -corners 000- -cornersize 30

Если с помощью приведенной выше команды поместить курсор мыши в правый нижний угол экрана (в радиусе 30 пикселей), автоматическая блокировка будет временно отключена.


Еще один вариант, который стоит попробовать -resetsaver:

xautolock -resetsaver

Или -detectsleepвариант:

xautolock -detectsleep

решение2

Вы можете использовать его xdg-screensaver lockдаже тогда, когда xautolock -locknowон не работает.

Связанный контент