
Estoy usando Manjaro 17 con i3wm (si es relevante).
Quiero ejecutar un solo comando al inicio para arreglar la configuración de toque y clic de mi panel táctil. Escribí el script que habilita la opción /usr/bin/
y cambia su modo como ejecutable.
/usr/bin/touchpad-enable-tap-click:
#!/bin/bash
exec xinput set-prop 11 290 1
El script se puede ejecutar sin problemas en la terminal sin causar ningún problema.
Basándome en mi investigación, preparé un archivo de servicio simple en formato /etc/systemd/system/
.
/etc/systemd/system/touchpad-enable-tap-click.service:
[Unit]
Description=Allow touchpad tap click
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-enable-tap-click
[Install]
WantedBy=multi-user.target
que ejecutar el siguiente comando antes de reiniciar:
[sercan@compaq ~]$ sudo systemctl enable touchpad-enable-tap-click.service
Created symlink /etc/systemd/system/multi-user.target.wants/touchpad-enable-tap-click.service → /etc/systemd/system/touchpad-enable-tap-click.service.
También probé la ruta completa.
El servicio no funciona como resultado:
estado del sistema
[sercan@compaq ~]$ systemctl status touchpad-enable-tap-click.service
● touchpad-enable-tap-click.service - Allow touchpad tap click
Loaded: loaded (/etc/systemd/system/touchpad-enable-tap-click.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2017-04-22 01:51:17 +03; 14min ago
Main PID: 32429 (code=exited, status=1/FAILURE)
Nis 22 01:51:17 compaq systemd[1]: Starting Allow touchpad tap click...
Nis 22 01:51:17 compaq bash[32429]: Unable to connect to X server
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Main process exited, code=exited, status=1/FAILURE
Nis 22 01:51:17 compaq systemd[1]: Failed to start Allow touchpad tap click.
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Unit entered failed state.
Nis 22 01:51:17 compaq systemd[1]: touchpad-enable-tap-click.service: Failed with result 'exit-code'.
diario -xedespués de intentar reiniciar el servicio:
Nis 22 02:09:52 compaq sudo[21550]: sercan : TTY=pts/0 ; PWD=/home/sercan ; USER=root ; COMMAND=/usr/bin/systemctl restart touchpad-enable-tap-click.service
Nis 22 02:09:52 compaq sudo[21550]: pam_unix(sudo:session): session opened for user root by (uid=0)
Nis 22 02:09:52 compaq systemd[1]: Starting Allow touchpad tap click...
-- Subject: Unit touchpad-enable-tap-click.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit touchpad-enable-tap-click.service has begun starting up.
Nis 22 02:09:52 compaq bash[21553]: Unable to connect to X server
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Main process exited, code=exited, status=1/FAILURE
Nis 22 02:09:52 compaq systemd[1]: Failed to start Allow touchpad tap click.
-- Subject: Unit touchpad-enable-tap-click.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit touchpad-enable-tap-click.service has failed.
--
-- The result is failed.
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Unit entered failed state.
Nis 22 02:09:52 compaq systemd[1]: touchpad-enable-tap-click.service: Failed with result 'exit-code'.
Nis 22 02:09:52 compaq sudo[21550]: pam_unix(sudo:session): session closed for user root
Espero que puedan ayudarme, se los agradezco.
Respuesta1
La GUI es una parte distinta del sistema operativo y una máquina puede tener múltiples entornos GUI. Sus intentos con systemd no funcionan porque los servicios se ejecutan fuera del contexto de una GUI. De hecho, se ejecutan antes de que se inicie la GUI. Para ejecutarlo xinput
, necesita tener una GUI, que es proporcionada por unservidor x.
Las aplicaciones saben cuál es el contexto de la GUI (es decir, con qué servidor X comunicarse) a través de la DISPLAY
variable de entorno. Esta es una forma de comprobar si hay una GUI disponible: si esa variable no está configurada, estás fuera del contexto de una GUI. (Establecer la variable no creará un contexto GUI. Podría permitirle conectarse a un contexto GUI existente desde afuera, pero eso no es relevante aquí).
Si su mensaje de inicio de sesión está en modo gráfico, entonces está utilizando ungestor de pantalla. Puede configurar el administrador de pantalla para que se ejecute xinput
y luego la configuración se aplicará tan pronto como se muestre el mensaje de inicio de sesión. Cómo hacerlo depende del administrador de pantalla que estés usando; ver¿Cómo puedo ejecutar un script que comienza antes de mi pantalla de inicio de sesión?para más detalles.
No importa cómo inicies sesión, puedes aplicar la configuración como parte de tus scripts de inicio de sesión. Si está utilizando .xinitrc
o .xsession
para iniciar su sesión GUI, agregue el comando allí. Si está utilizando un entorno de escritorio que tiene un concepto de aplicaciones de inicio, agregue el xinput
comando o un script que lo ejecute a sus aplicaciones de inicio. Si está utilizando un administrador de ventanas directamente, consulte su documentación para saber cómo ejecutar un comando al inicio (casi cualquier administrador de ventanas puede hacer esto).
Dado que está utilizando i3, puede ejecutar un comando en el momento de iniciar sesión en la GUI poniendo unexec
dominioen tus ~/.i3/config
:
exec xinput set-prop 11 290 1
Aunque systemd inicia el administrador de pantalla como un servicio, no creo que proporcione una manera de ejecutar un comando en el contexto GUI resultante. Sin embargo, puede proporcionar una forma de ejecutar un comando cuando inicia sesión; ver elWiki Arcopor ejemplo.
Respuesta2
Esto sucede porque está intentando ejecutar un comando que modifica el comportamiento del sistema X (la GUI) antes de que X se haya cargado. Entonces, comprensiblemente, se queja de que no puede conectarse al servidor X. La pista es el nombre del comando que estás ejecutando:Xaporte .
Ahora bien, no puedo garantizar que systemd no desarrolle en un futuro cercano la capacidad de interactuar con un servidor que aún no se ha iniciado, pero por el momento, esta no es la herramienta adecuada para el trabajo.
Lo primero que debe intentar es simplemente agregar ese exec
comando (sin el innecesario) a su ~/.profile
(o, si lo usa bash
y existe, a su ~/.bash_profile
):
xinput set-prop 11 290 1
Sin embargo, tenga en cuenta que esto hará que se queje si inicia sesión de forma no gráfica. Si eso no funciona (veraquípara obtener más detalles), busque una manera de agregarlo a los programas de inicio de su entorno de escritorio. Los DE más populares como Gnome, Cinnamon, KDE, Unity, etc., tienen herramientas GUI que le permiten cargar programas al iniciar sesión. Veraquípara saber cómo hacerlo en openbox yaquíPara LXDE. Alternativamente, veraquípara una solución más global usando ~/config/autostart
.