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

14

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.

l0b0
источник
Какой Unix вы используете?
Касперд
Я сталкиваюсь с этой же проблемой. Я не слишком углубился в это, но я бы тоже хотел узнать ответ.
HalosGhost
Как вы начинаете это? Недавно я обнаружил то же самое при запуске .xinitrc: я переключился на --userслужебный файл, и это больше не проблема ...
jasonwryan
1
Воспроизведение видео с помощью mpv (но не mplayer) вызывает у меня проблему. Оба игрока имеют пустые конфигурации.
JRM
1
Менее чем оптимальное решение этого триггера является добавление stop-screensaver=noк ~/.mpv/config. Конечно, это означает, что вы должны вручную отключить блокировку при воспроизведении видео с mpv.
JRM

Ответы:

5

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

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

stop-screensaver=no

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


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

xautolock -corners 000- -cornersize 30

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


Еще одна вещь, чтобы попробовать это -resetsaverвариант:

xautolock -resetsaver

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

xautolock -detectsleep
Матин Улхак
источник
Хорошие советы, спасибо! Я знал о том, что мой видеоплеер (VLC) отключил блокировку экрана в течение многих лет, но, честно говоря, эта проблема сейчас настолько далека, что я даже не могу вспомнить, если бы мой разум просто отключился от этого факта. Во всяком случае, я перестал использовать xautolock, поэтому вопрос сейчас немного спорный. Отметить как принятый как самый полезный ответ до сих пор. Если у кого-то есть точно такая же проблема, я могу удалить этот вопрос, чтобы избежать дублирования.
10