Actkbd en tant que service avec systemd


12

Il y a quelque temps, j'ai demandé comment arrêter un lecteur de musique alors que l'écran était verrouillé. La réponse a été d'utiliser actkbd qui fonctionne comme un charme. Maintenant, je voulais ajouter actkbd en tant que service à systemd afin de le démarrer automatiquement au démarrage. Donc, comme vous pouvez le voir, le service est démarré correctement et il apparaît également dans htop. Quelques sorties ci-dessous:

[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

J'ai le actkbd.servicefichier suivant dans/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

Le problème est donc qu'après le démarrage du service avec systemctl, rien ne se passe si j'appuie sur mon raccourci habituel pour suspendre Rhythmbox. Si au lieu de cela, j'exécute simplement la commande /usr/local/sbin/actkbd -d /dev/input/event3 -Dvia le terminal racine, tout fonctionne bien. Pourquoi ça?

Désolé si c'est quelque chose d'évident, je suis nouveau dans le monde du système mais je n'ai rien trouvé qui m'a aidé.

À votre santé.

EDIT: Cela ne fonctionne toujours pas. Si quelqu'un a un peu de temps, j'apprécierais que l'on puisse essayer de le reproduire. Si cela est possible, je déposerai un rapport de bogue.


Je dois encore essayer actkbdavec systemd, en raison du manque de temps, mais je pense que votre question a quelque chose à voir avec actkbdêtre démarré avant que le système d'entrée est complètement initialisé - actkbdfonctionne très bien quand a commencé comme un bit de poids faible sur mon ordinateur portable de service de développement. Vous devez vous assurer qu'il est démarré après le evdevlancement du module et que votre clavier a toujours le même eventXnœud de périphérique.
thkala

Merci pour la réponse Theodoros. Les tests que j'ai montrés ci-dessus ont été exécutés pendant que tout était démarré. Donc, en théorie, tous les modules doivent être chargés. Le nœud de périphérique devrait également fonctionner correctement, car l'exécution manuelle de la commande fonctionne correctement tout le temps.
Azrael3000

Réponses:


5

Si vous souhaitez que l'utilisateur puisse accéder à l'appareil et exécuter l'unité de service, vous devrez établir une udevrègle et définir le bon MODESpour autoriser l'utilisateur à accéder à l'appareil. Le simple démarrage du fichier d'unité User=rootest incorrect car vous n'exécutez pas la session en tant que root mais en tant qu'utilisateur. Lorsque vous l'exécutez à partir d'un terminal racine, vous activez un terminal racine à l'intérieur de votre session utilisateur. Pour obtenir plus d'informations à ce sujet, recherchez des informations sur systemd --user.

Élaborer une règle udev

Utilisez la commande suivante pour vous donner les informations dont vous aurez besoin pour remplir la udevrègle:

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

À partir de la sortie de la commande ci-dessus, créez votre règle udev dans /etc/udev/rules.d/<device>.conf. Ouvrez-le dans votre éditeur de texte préféré et remplissez les variables

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

Pour plus d'informations sur la création et la dénomination des udevrègles, consultez man udevle wiki de votre distribution Linux. Après avoir défini les règles, redémarrez. Et puis démarrez l'unité une fois connecté à X.

En outre, voici un fichier d'unité système beaucoup plus sain que celui que vous avez fourni.

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.