xmodmap потерян после сна

# trigger-poweroff.service
[Unit]
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --no-block poweroff

DefaultDependencies=noизбегает неявного Conflicts=shutdown.target. Это означает, что не имеет значения, запущена ли служба в режиме задания replace-irreversible. Это также позволяет избежать неявного Wants=sysinit.target; это было бы неоптимально, например. если вы хотите запустить эту службу после перехода на emergency.target.

Before=shutdown.targetгарантирует, что служба завершится до того, как systemd -shutdown начнет отправлять сигналы. По крайней мере, это упрощает анализ блока на правильность. Мы избегаем взаимоблокировки, следя за тем, чтобы служба не ждала завершения отключения питания.

Не имеет значения, если systemd-shutdownзавершит процесс systemctl с помощью SIGTERM. Процесс просто завершится со статусом WIFSIGNALи WTERMSIGиз SIGTERM. Systemd рассматривает это как чистый и успешный выход.См. определение SuccessExitStatus в man systemd.exec. Однако, если ядро ​​загадочным образом не запланировало этот первоначальный выход до завершения работы systemd DEFAULT_TIMEOUT_USEC, systemd -, оно отправило бы неблокируемый сигнал SIGKILL. Systemd не будет рассматривать это как успешный выход.

1
09.03.2019, 22:47
2 ответа

Ваши измененные настройки также «теряются», когда вы отключаете и снова подключаете клавиатуру, и это то, что происходит здесь :приостановка генерирует события горячего подключения, так как клавиатура отключается при переходе в приостановку и снова включается при выходе.

С точки зрения X-сервера, клавиатура, подключенная после выхода из режима ожидания, является новой клавиатурой, поэтому она активируется со стандартными привязками так же, как и вторая клавиатура.

Это известный недостаток драйверов USB-клавиатуры, и его будет трудно исправить в ядре (, поскольку USB повторно -перечисляется при возобновлении работы, поэтому нам потребуется метод сохранения идентификатора устройство, даже если ему назначен новый номер ), и его трудно исправить на X-сервере (, поскольку для этого потребуется вести историю устройств ).

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

2
24.11.2020, 16:41

Вот рабочее решение, полученное из разных источников, но в основном написанное мной. caps — это скрипт xmodmap (CapsLock => F13 ).

#!/bin/bash

USERN=cemkalyoncu
SCRIPT=/home/cemkalyoncu/Installed/caps

case $1 in
    post)
        DISPLAY=:0
        export DISPLAY
        su $USERN -c "$SCRIPT"
        #screen
        #su $USERN -c "sleep 30; kwin --replace &" &
    esac

Я тоже оставил kwin --replaceт.к. kwin иногда глючит и требует перезагрузки, но это не демон и его надо отсоединять с помощью экрана. Это только если вы используете KDE. Если не установлен, установите screen. Экспорт отображения здесь является ключом к тому, чтобы заставить его работать. Запуск с вашим пользователем также необходим. Даже если вы возобновляете подписку, это все равно не ваша учетная запись. Сон не нужен для xmodmap. Но kwin автоматически сбрасывается системой через несколько секунд после возобновления работы, но иногда это не удается; поэтому задержка необходима.

0
25.11.2020, 11:25

Теги

Похожие вопросы