PDA

Ver la versión completa : [Ayuda] ¿Cuales son las diferencias entre "Ejecutar" y "Ejecutar en la terminal"?



Dullyboy
25/09/2013, 14:36
Estoy en Debian y quiero que al arrancar y llegar al entorno gráfico se ejecute el típico script de inicio con mis cosas, que es este:

#!/bin/bash
### BEGIN INIT INFO
# Provides: Autoejecución
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 5
# Default-Stop: 0 1 6
# Short-Description: Mi script de arranque en /etc/init.d/Batch_inicio.sh
# Description:
#
### END INIT INFO

xinput --set-prop 10 'Device Accel Constant Deceleration' 2

xmodmap -e 'keycode 87='
xmodmap -e 'keycode 88='
xmodmap -e 'keycode 89='

sudo actkbd -D

~/Desktop/cambiadordefondo.sh &

pidgin &

deadbeef &

iceweasel &

parcellite &

~/accuweather_conky/accuw_script &

conky -c ~/.conky/conkyrc_acc &

Creo que está bien puesto en /etc/init.d/ y añadiendido como servicio pero no hace nada. Si lo ejecuto desde la consola funciona, si le doy dobleclick y elijo ejecutar funciona, pero si elijo "Ejecutar en la terminal" no hace nada. ¿En que se diferencian? porque busqué y todavía no conseguí encontrar una explicación.

bitrider
25/09/2013, 14:52
Ejecutando todo eso como servicio no vas a conseguir nada. El usuario con el que se ejecuta no tiene nada que ver con el usuario que haya iniciado la sesión en las X.

Prueba con ~/.xinitrc

https://wiki.archlinux.org/index.php/Xinitrc

juanvvc
25/09/2013, 15:05
Como dice bitrider, eso no es un servicio así que no debería estar en /etc/init.d. Está muy mal, fatal, horrible, es un agujero de seguridad por tres razones:

- Cuando se ejecute, 90% seguro que las X aún no estarán ejecutándose así que no puedes ejecutar programas de las X. Esto podría solucionarse poniendo una espera al inicio, o mejor aún, poniéndolo a este script una prioridad menor que a las X.
- Cuando se ejecute, 99% seguro de que nadie habrá iniciado sesión todavía, por lo que no funcionará. Y además...
- Los scripts en /etc/init.d se ejecutan como root, que seguro que no es lo que quieres.

Así que tenemos que buscar otra solución, como por ejemplo el autostart de tu escritorio.

Todo esto hace unos años se ponía dentro del archivo $HOME/.xinitrc y a correr. Aún debería funcionar. Pero últimamente se prefiere que cada entorno gráfico tenga un directorio para iniciar cosas cuando lo empiezas. El estándar dice que pongas un "acceso directo" en $HOME/.config/autostart, y digo "acceso directo" entre comillas porque en realidad es un archivo .desktop. Mira aquí: http://stackoverflow.com/questions/8247706/start-script-when-gnome-starts-up (en KDE es exactamente igual, excepto que el asistente para hacerlo automático está en Settings->System Admin->Startup->Autostart)

Sobre las diferencias entre ejecutar en una terminal o no, supongo que será usar el equivalente a "xterm -e" delante de tu programa o no. Los programas de terminal lo necesitan, los programas gráficos o los servicios pues no.

Dullyboy
25/09/2013, 16:31
Como dice bitrider, eso no es un servicio así que no debería estar en /etc/init.d. Está muy mal, fatal, horrible, es un agujero de seguridad por tres razones:

- Cuando se ejecute, 90% seguro que las X aún no estarán ejecutándose así que no puedes ejecutar programas de las X. Esto podría solucionarse poniendo una espera al inicio, o mejor aún, poniéndolo a este script una prioridad menor que a las X.
- Cuando se ejecute, 99% seguro de que nadie habrá iniciado sesión todavía, por lo que no funcionará. Y además...
- Los scripts en /etc/init.d se ejecutan como root, que seguro que no es lo que quieres.

Me acabo de dar cuenta de que así lo solucioné en el portátil, cambiando las rutas y con un sleep 7 porque tengo siempre puesto el login automático :D. Habrá que cambiarlo :P.

Así que tenemos que buscar otra solución, como por ejemplo el autostart de tu escritorio.

Todo esto hace unos años se ponía dentro del archivo $HOME/.xinitrc y a correr. Aún debería funcionar. Pero últimamente se prefiere que cada entorno gráfico tenga un directorio para iniciar cosas cuando lo empiezas. El estándar dice que pongas un "acceso directo" en $HOME/.config/autostart, y digo "acceso directo" entre comillas porque en realidad es un archivo .desktop. Mira aquí: http://stackoverflow.com/questions/8247706/start-script-when-gnome-starts-up (en KDE es exactamente igual, excepto que el asistente para hacerlo automático está en Settings->System Admin->Startup->Autostart)

Sobre las diferencias entre ejecutar en una terminal o no, supongo que será usar el equivalente a "xterm -e" delante de tu programa o no. Los programas de terminal lo necesitan, los programas gráficos o los servicios pues no.
Lujo, muchas gracias, con lo del acceso directo ya he conseguido que funcione. Cuando buscaba por Google, esa solución la había descartado porque yo quería ejecutar mi script (y luego todo lo que encontraba era para hacer servicios), no tener accesos directos de los programas que quería arrancar. No me había dado por pensar en que era tan fácil como hacer un acceso directo a mi script.