El servicio de Systemd no funciona

2

¿Alguien podría descubrir por qué esta unidad systemd no se inicia?

He colocado el servicio en /etc/systemd/system/startup_actions.service

[Unit]  
Description=Startup actions

[Service]
Type=oneshot 
ExecStart=/usr/local/bin/disable_pgupdw.sh

[Install]
WantedBy=multi-user.target

Para correrlo hago

sudo systemctl start startup_actions.service 

La unidad deshabilita de manera simple las teclas pgup y down con xmodmap, y funciona por sí sola:

#!/bin/bash
xmodmap -e 'keycode 112 = NoSymbol'
xmodmap -e 'keycode 117 = NoSymbol'

El guión se coloca en

/usr/local/bin

Esta es la salida de systemctl status startup_actions

startup_actions.service - Startup actions
Loaded: loaded (/etc/systemd/system/startup_actions.service; enabled; vendor preset: enable
Active: failed (Result: exit-code) since Sat 2017-11-04 14:15:18 GMT; 1h 21min ago
Process: 2360 ExecStart=/usr/local/bin/disable_pgupdw.sh (code=exited, status=1/FAILURE)
Main PID: 2360 (code=exited, status=1/FAILURE)

Cuando intento iniciarlo dice:

Job for startup_actions.service failed because the control process exited with error code.
See "systemctl  status startup_actions.service" and "journalctl  -xe" for details.
Reyx_0
fuente
¿Has hecho 'systemctl daemon-reload'? ¿Qué dice cuando intentas iniciarlo? ¿Cuál es la salida de 'systemctl status startup_actions?
Jaroslav Kucera

Respuestas:

1

La siguiente unidad funciona, aunque no es la solución óptima.

[Unit]  
Description=Startup actions

[Service]
Type=simple
User=USERNAME
Environment=DISPLAY=:0 
ExecStart=/usr/local/bin/disable_pgupdw.sh

[Install]
WantedBy=multi-user.target

De hecho, uno necesita agregar un sueño 10 al comienzo del script, lo que no es muy bueno

#!/bin/bash
sleep 10
xmodmap -e 'keycode 112 = NoSymbol'
xmodmap -e 'keycode 117 = NoSymbol'

Como señaló Ignacio, xmodmap requiere acceso al servidor X. La combinación

Type=simple
User=USERNAME
Environment=DISPLAY=:0

y

sleep 10

en el guión parece cumplir el requisito.

Reyx_0
fuente
0

La misma unidad funciona para mí cuando la pongo ~user/.config/systemd/user/(luego systemctl --user daemon-reload) y la empiezo a usar systemctl --user start startup_actions.service.
De esta forma, las variables de entorno se configuran correctamente.

liums
fuente