Actkbd como serviço com systemd


12

Há um tempo atrás, perguntei como parar um music player enquanto a tela estava bloqueada. A resposta foi usar o actkbd, que funciona como um encanto. Agora eu queria adicionar o actkbd como um serviço ao systemd para iniciá-lo automaticamente durante a inicialização. Então, como você pode ver, o serviço foi iniciado corretamente e também aparece no htop. Alguma saída abaixo:

[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

Eu tenho o seguinte actkbd.servicearquivo em/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

Portanto, o problema é que, após iniciar o serviço com systemctl, nada acontece se eu pressionar meu atalho usual para pausar o Rhythmbox. Se eu simplesmente executar o comando /usr/local/sbin/actkbd -d /dev/input/event3 -Datravés do terminal raiz, tudo funciona bem. Porquê isso?

Desculpe se é algo óbvio, sou novo no ramo de sistemas, mas não consegui encontrar nada que me ajudasse.

Felicidades.

EDIT: Isso ainda não está funcionando. Se alguém tiver algum tempo, eu apreciaria se alguém pudesse tentar reproduzi-lo. Se isso for possível, arquivarei um relatório de erro.


Eu ainda tenho que tentar actkbdcom systemd, devido à falta de tempo, mas eu suspeito que o problema tem algo a ver com o actkbdque está sendo iniciado antes que o sistema de entrada é totalmente inicializado - actkbdfunciona bem quando começou como um LSB serviço no meu laptop de desenvolvimento. Você deve certificar-se de que ele seja iniciado após o lançamento do evdevmódulo e que seu teclado sempre tenha o mesmo eventXnó do dispositivo.
Thkala #

Obrigado pela resposta Theodoros. Os testes que mostrei acima foram executados enquanto tudo era inicializado. Então, em teoria, todos os módulos devem ser carregados. O nó do dispositivo também deve estar bem, pois executar o comando manualmente funciona bem o tempo todo.
precisa saber é o seguinte

Respostas:


5

Se você deseja que o usuário possa acessar o dispositivo e executar a unidade de serviço, precisará fazer uma udevregra e definir o apropriado MODESpara permitir que o usuário tenha permissão para acessar o dispositivo. Basta iniciar o arquivo da unidade como User=rootincorreto, pois você não está executando a sessão como root, mas como seu usuário. Ao executá-lo a partir de um terminal raiz, você está ativando um terminal raiz de dentro da sua sessão de usuários. Para obter mais informações, consulte as informações em systemd --user.

Montando uma regra do udev

Use o comando a seguir para fornecer as informações necessárias para preencher a udevregra:

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

Na saída do comando acima, crie sua regra do udev em /etc/udev/rules.d/<device>.conf. Abra-o no seu editor de texto favorito e preencha as variáveis

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

Para obter mais informações sobre como criar e nomear udevregras, consulte man udevo Wiki da sua distribuição Linux. Depois de definir as regras, reinicie. E, em seguida, inicie a unidade uma vez logado no X.

Além disso, aqui está um arquivo de unidade do sistema muito mais sensato que o que você forneceu.

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.