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через кореневий термінал, все працює добре. Чому це?

Вибачте, якщо це щось очевидне, я новачок у системному бізнесі, але не зміг знайти нічого, що допомогло б мені.

Ура.

EDIT: Це все ще не працює. Якщо у когось є якийсь час, я би вдячний, якщо можна спробувати його відтворити. Якщо це можливо, я подаю звіт про помилку.


У мене є ще спробувати 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.