ejecutar script de inicio que requiere una sesión de xserver

ejecutar script de inicio que requiere una sesión de xserver

Tengo un script python3 que usa el Gtkmódulo (importado de gi.repository, para la funcionalidad de administrador reciente), que requiere un enlace a la sesión actual de xserver ( lightdmservicio en Ubuntu).

Ejecutarlo manualmente a través de la consola (en una sesión de xserver) funciona, pero quiero que se ejecute automáticamente.

Un script init.d no funcionará (estableciendo la variable DISPLAY en 0.0). El uso xvfb-runhizo que el script init.d ejecutara mi script, pero en un entorno de servidor virtual como se esperaba (no el mío). ¿No existe ningún equivalente que conecte un script init.d a la sesión xserver actual?

Hasta ahora he probado un .xinitrcarchivo (en ~/, sí, es ejecutable), además de crear .xprofile, .xsession, .xsessionrcun enlace al primero a través de ln -s. Intenté agregar gnome-terminal &para realizar pruebas, pero el terminal tampoco apareció, ya sea después de reiniciar lightdmo incluso de toda la PC e iniciar sesión nuevamente.

yo también lo he intentadoEjecute el script de configuración al reanudar la sesión X, pero eso da el error Can't open /usr/share/acpi-support/power-funcs.

Usando upstart, como lo sugiereEjecute un script de inicio con lightdmTampoco proporcionaría la variable de visualización xserver (¿o el identificador?), simplemente ejecútelo después de lightdmcomenzar, ¿correcto?

¿Quizás ponerlo en algún lugar xorg.conf? (¿Cómo puedo hacer que la personalización de xrandr sea permanente?) Me gana..

(Mi secuencia de comandos crea listas rápidas de archivos recientes y las agrega a los menús contextuales del iniciador de Unity, similar a Windows:https://github.com/thirschbuechler/ubuntu-recentquicklists)

Respuesta1

Como en muchos casos, el tiempo es el tema principal aquí.

  1. Su script debe ejecutarse a nivel de usuariodespués de iniciar sesión, ya que edita los elementos del iniciador, que está a nivel de usuario.
  2. Incluso entonces, observando lo que debería hacer el script (leyendo su explicación), el script debe esperar un poco hasta que el escritorio se cargue por completo; El Unity Launcher no es lo primero que debe estar "listo" después de iniciar sesión. Si el script se ejecuta demasiado pronto, se romperá o no alcanzará el objetivo.

En breve

Necesita ejecutar el script appr. 10 a 15 segundos después de iniciar sesión, lo que se puede hacer agregando:

/bin/bash -c "sleep 15 && python /path/to/script.py"

(si el script no es ejecutable), o

/bin/bash -c "sleep 15 && /path/to/script.py"

(si el guiónesejecutable) a las Aplicaciones de inicio del usuario: Dash > Aplicaciones de inicio > Agregar.

Ejecutarlo portodos los usuarios

Si necesita que el script se ejecutepara todos los usuarios(después de iniciar sesión), puede agregarlo a las aplicaciones de inicio para todos los usuarios a la vez.

Para hacer eso, copie el código a continuación en un archivo vacío, edite las líneas, comenzando con Name=y establezca la ruta correcta al script en la línea:

Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"

luego guarda el archivo /etc/xdg/autostartcomo launch_script.desktop(o como quieras, siempre que termine con .desktop)

[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application

información relacionada