Actkbd как сервис с systemd


12

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

[root@hostname init.d]# systemctl start actkbd.service
[root@hostname init.d]# systemctl status actkbd.service
actkbd.service - Actkbd: Daemon for X-independent shortcuts
      Loaded: loaded (/etc/systemd/system/multi-user.target.wants/actkbd.service)
      Active: active (running) since Tue, 10 Apr 2012 17:50:36 +0200; 2s ago
     Process: 23526 ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D (code=exited, status=0/SUCCESS)
    Main PID: 23527 (actkbd)
      CGroup: name=systemd:/system/actkbd.service
              └ 23527 /usr/local/sbin/actkbd -d /dev/input/event3 -D
[root@hostname init.d]# systemctl stop actkbd.service
[root@hostname init.d]# ps -C actkbd
  PID TTY          TIME CMD

У меня есть следующий actkbd.serviceфайл в/etc/systemd/system/multi-user.target.wants/

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
Type=forking
ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -15 $MAINPID
Restart=always
User=root

Так что проблема в том, что после запуска сервиса с systemctl ничего не происходит, если я нажимаю на свой обычный ярлык для приостановки Rhythmbox. Если я вместо этого просто выполню команду /usr/local/sbin/actkbd -d /dev/input/event3 -Dчерез корневой терминал, все будет нормально. Почему так?

Извините, если это очевидно, я новичок в системном бизнесе, но не смог найти ничего, что могло бы мне помочь.

Приветствия.

РЕДАКТИРОВАТЬ: Это все еще не работает. Если бы у кого-то было время, я был бы признателен, если бы попытался воспроизвести его. Если это возможно, я подам отчет об ошибке.


У меня есть еще попробовать actkbdс systemd, из - за нехватки времени, но я подозреваю , что ваша проблема имеет что - то делать с actkbdтем начала , прежде чем система ввода полностью инициализирована - actkbdработает отлично при запуске как LSB службы на моем ноутбуке развития. Вы должны убедиться, что он запускается после запуска evdevмодуля, и что ваша клавиатура всегда имеет один и тот же eventXузел устройства.
Thkala

Спасибо за ответ Теодорос. Тесты, которые я показал выше, были выполнены, пока все загружалось. Таким образом, теоретически все модули должны быть загружены. Узел устройства тоже должен быть в порядке, так как выполнение команды вручную работает нормально все время.
Azrael3000

Ответы:


5

Если вы хотите, чтобы пользователь мог получить доступ к устройству и запустить сервисный модуль, то вам нужно будет создать udevправило и установить соответствующее, MODESчтобы разрешить пользователю доступ к устройству. Просто запустить файл модуля как User=rootнеправильный, так как вы запускаете сеанс не как пользователь root, а как пользователь. Когда вы запускаете его из корневого терминала, вы активируете корневой терминал изнутри сеанса пользователя. Чтобы получить больше информации об этом посмотрите информацию о systemd --user.

Составление правила udev

Используйте следующую команду, чтобы дать вам информацию, которая вам понадобится для заполнения udevправила:

udevadm info --path=$(udevadm info -q path -n /dev/input/event3)

Из вывода приведенной выше команды создайте правило udev в /etc/udev/rules.d/<device>.conf. Откройте его в вашем любимом текстовом редакторе и заполните переменные

 SUBSYSTEM=="device",
 SYSFS{idVendor}=="ID Vendor Here" ,
 SYSFS{idProduct}=="ID Model Here",
 MODE="666"

Дополнительную информацию о udevправилах создания и именования смотрите в man udevвики вашего дистрибутива Linux. После настройки правил перезагрузитесь. А затем запустите устройство после входа в X.

Кроме того, вот гораздо более вменяемый файл системного блока, чем тот, который вы предоставили.

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.