Eu tenho um teclado que tem backlights que não são inicializados por padrão quando eu uso o Ubuntu e então eu tenho que executar manualmente um script toda vez que ele for iniciado para ativar as backlights.
Eu queria automatizar isso para que o script fosse executado automaticamente e, portanto, criei uma unidade de serviço systemd para cuidar disso.
O problema é que a unidade de serviço não funciona mesmo quando iniciada a partir do terminal
systemctl daemon-reload
systemctl start keyboard-lights.service
Eu criei um arquivo .service
dentro de /etc/systemd/system/
[Unit]
Description=Startup script for keyboard backlights
[Service]
ExecStart=/usr/local/bin/keyboard-lights.sh
[Install]
WantedBy=multi-user.target
O script para ativar as luzes do teclado está em /usr/local/bin/keyboard-lights.sh
Eu fiz o script executável usando
chmod 744 /usr/local/bin/keyboard-lights.sh
O que estou perdendo do meu arquivo .service
que está fazendo com que o script não seja executado?
journalctl -xe
Oct 23 22:09:13 user keyboard-lights.sh[3479]: running keyboard-lights script
Oct 23 22:09:13 user keyboard-lights.sh[3479]: xset: unable to open display ""
Oct 23 22:09:13 user systemd[1]: keyboard-lights.service: Main process exited, code=exite
Oct 23 22:09:13 user systemd[1]: keyboard-lights.service: Unit entered failed state.
Oct 23 22:09:13 user systemd[1]: keyboard-lights.service: Failed with result 'exit-code'.
ls -lZ
-rw-rw-r-- 1 root root ? 199 Oct 23 22:00 /etc/systemd/system/keyboard-lights.service
este é o script keyboard-lights.sh
e funciona quando executo isso sozinho.
#!/bin/bash
echo "running keyboard-lights script"
if [ -f /tmp/keyboard_light ]; then
xset -led 3 && rm /tmp/keyboard_light
else
xset led 3 && touch /tmp/keyboard_light
fi
Alterei o título do post para refletir o que acredito ser o problema que está causando o problema.
Eu tentei pesquisar na Web e não encontrei uma solução para xset: unable to open display ""
Eu tentei adicionar export DISPLAY=:0
ao meu script de shell, mas isso não corrigiu o problema.
Alterei meu arquivo de serviço para executar apenas o comando para ativar as luzes do teclado alterando a linha ExecStart
para
ExecStart=/bin/sh -c "xset led 3"
mas o erro xset: unable to open display ""
ainda persiste.
Por que o comando será executado no terminal bem (ligando as luzes do teclado), mas não será executado sem erros no arquivo de serviço quando eu iniciá-lo?