Actkbd como serviço com systemd

Actkbd como serviço com systemd

Há algum tempo perguntei como parar um reprodutor de música enquanto a tela está bloqueada. A resposta foi usar o actkbd, que funciona perfeitamente. Agora eu queria adicionar o actkbd como um serviço ao systemd para iniciá-lo automaticamente durante a inicialização. Como você pode ver, o serviço foi iniciado corretamente e também aparece no htop. Algumas saídas 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

Então o problema é que depois de iniciar o serviço com systemctl nada acontece se eu pressionar meu atalho habitual para pausar o Rhythmbox. Se eu apenas executar o comando /usr/local/sbin/actkbd -d /dev/input/event3 -Datravés de um terminal raiz, tudo funcionará bem. Porquê isso?

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

Saúde.

EDITAR: 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, enviarei um relatório de bug.

Responder1

Se desejar que o usuário possa acessar o dispositivo e executar a unidade de serviço, você precisará criar uma udevregra e definir a MODESpermissão adequada para permitir que o usuário acesse o dispositivo. Simplesmente iniciar o arquivo da unidade como User=rootestá incorreto, 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 sessão do usuário. Para obter mais informações sobre isso, procure informações em systemd --user.

Montando uma regra do udev

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

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

A partir da saída do comando acima, crie sua regra do udev no formato /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, dê uma olhada no man udevWiki da sua distribuição Linux. Depois de definir as regras, reinicie. E então inicie a unidade uma vez logado no X.

Além disso, aqui está ummuitoarquivo de unidade de sistema mais lógico do que aquele 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

informação relacionada