
Creé una aplicación tkinter para manejar la pulsación del botón de encendido, pero no se inicia cuando debería. Aunque si lo uso echo hello>>~/junk
como acción acpi, agrega un saludo a la basura cada vez que presiona el botón de encendido. Agregar un ejecutivo o un punto antes del comando de acción (para ejecutarlo en el shell actual) no ayudó. ¿Cómo puedo hacerlo funcionar?
Editar:
Ok, logré que eso funcionara con la ayuda de mikejonesey, pero después apareció un problema más. El script se llama con privilegios de root, incluso con el bit suid configurado en el script, por lo que tengo que ingresar la contraseña de root en la pantalla xlock para continuar.
Edición 2:
Parece que puedo iniciar la aplicación desde un archivo de eventos acpi como este:
event=button/power PBTN action=export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority &&/home/saga/bin/shutdownprompt
pero no desde un script de controlador llamado desde un archivo de eventos:
button/power ) if [ "$2" = "PBTN" ];then export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority && /home/saga/shutdownprompt; fi ;;
Este es un recorte del script del controlador principal que se llama cada vez que se presiona una tecla. ¿Cuál es el problema aquí?
Respuesta1
necesitas agregar algunas cosas para usar X;
Los uso en un cronjob (es lo mismo...)
#*/15 * * * * export DISPLAY=:0.0 && export XAUTHORITY=/home/mike/.Xauthority && /home/mike/bin/defunct-check.sh
Esto debería funcionar desde cualquier script.
Respuesta2
Parece que debería haber una solución fácil a este problema. Yo mismo estaba intentando hacer algo similar: ejecutar un programa de captura de pantalla (flameshot) cuando se presiona un botón del teclado.
Al final, la solución que funcionó para mí fue crear una FIFO (canalización con nombre) en mi directorio de inicio llamado .acpi_execute.pipe
. Luego utilizo el siguiente script, llamado .acpi_execute
.
#!/usr/bin/bash
while true ; do
while IFS='' read command ; do
$command
done < ~/.acpi_execute.pipe
done
Prefiero i3 a GNOME, KDE, etc., debido a su rendimiento (muy liviano) y su naturaleza de mosaico. En la parte inferior de mi archivo de configuración i3 ~/.config/i3/config
tengo:
exec ~/.acpi_execute
Esto permite que el script se ejecute cada vez que se inicia mi entorno de escritorio (ya sea directamente en la máquina o mediante una conexión VNC remota).
Tenga en cuenta que lo anterior tiene implicaciones de seguridad. Por ejemplo, si alguien puede escribir en la tubería anterior, puede ejecutar comandos arbitrarios.como tu. Obviamente esto sería malo. Otorgar permisos FIFO 600, de su propiedad, reduce este riesgo. También puedes limitar los comandos posibles. Es decir, no ejecute $command
, sino el comando específico que desee (por ejemplo, flameshot gui
).