Actkbd como serviço com o systemd

12

Algum tempo atrás eu perguntei como parar um player de música enquanto a tela está bloqueada. A resposta foi usar actkbd, que funciona como um encanto. Agora eu queria adicionar o actkbd como um serviço ao systemd para iniciá-lo automaticamente ao inicializar. Então, como você pode ver, o serviço é iniciado corretamente e também é exibido 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 arquivo actkbd.service 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 usual para pausar o Rhythmbox. Se eu apenas executar o comando /usr/local/sbin/actkbd -d /dev/input/event3 -D através do terminal root, tudo funciona bem. Por que isso?

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

Felicidades.

EDITAR: Isso ainda não está funcionando. Se alguém tiver algum tempo, agradeceria se alguém pudesse tentar reproduzi-lo. Se isso for possível, eu vou enviar um relatório de bug.

    
por Azrael3000 10.04.2012 / 18:00

1 resposta

5

Se desejar que o usuário possa acessar o dispositivo e executar a unidade de serviço, será necessário criar uma regra udev e definir o MODES adequado para permitir que o usuário acesse o dispositivo. Basta iniciar o arquivo da unidade, pois User=root está incorreto, pois você não está executando a sessão como root, mas como seu usuário. Quando você o executa a partir de um terminal raiz, você está ativando um terminal raiz dentro da sessão de usuários. Para obter mais informações, consulte as informações sobre systemd --user .

Juntando uma regra do udev

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

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

A partir da 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 mais informações sobre como fazer e nomear udev , dê uma olhada em man udev ou na Wiki 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á um muito arquivo de unidade de sistema mais sã e depois 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
    
por 11.03.2013 / 03:43

Tags