#1 Le 31/10/2006, à 14:29
- kwenji
lancer une commande au démarrage ?
bonjour,
aujourd'hui j'ai un petit soucis avec mon clavier Logitch G15 :
j'ai installer tout les programme necessaire poru faire fonctionner lson écran lcd et les touches de fonction mais il y a juste un petit soucis lors de l'initialisation du daemon...
je dois faire un
sudo modprobe uinput
avant de lancer le
sudo g15daemon
à chaque reboot
donc y'aurai il un moyen d'automatiser ces 2 commandes (et si possible sans que j'ai à intervenir pour rentrer mon mot de passe)
Meric d'avance
PS : je suis nouveau sous linux et depuis 2 mois j'ai essayer au moins 5 distributions et je dois dire que le point fort d'Ubuntu (mon choix pour l'instant) c'est sa communauté...
Hors ligne
#2 Le 31/10/2006, à 17:46
- luc Milland
Re : lancer une commande au démarrage ?
Salut,
j'ai installer tout les programme necessaire poru faire fonctionner lson écran lcd et les touches de fonction
C'est à dire ? Tu as installé un paquet ubuntu via synaptic ou apt-get, ou tu as récupéré un tarball (.tar ou .tgz) ? Ou un paquet que tu as installé à la mano ?
Cette question, parce qu'un paquet bien fait intègre ces choses là normalement... Donc, si c'est un paquet, il faut faire un rapport de bug au mainteneur du paquet. Si t'as récupéré des sources et tout compilé à la mimine, voilà ce qu'il te reste à faire :
[Attention, ce n'est pas la "debian-way". En vrai, il faudrait faire son paquet et l'installer pour que le système soit au courant, que les fichiers soit connus, que ce soit simple à désinstaller, etc... Mais ça, c'est plus long à apprendre]
1) Charger le module au démarrage
# sudo echo uinput >> /etc/modules
Attention, très importantes, les deux flèches (une flèche = je remplace le contenu du fichier, deux flèches, j'ajoute à la fin).
2) Enregistrer le service
Là, c'est plus velu, faut pas tout prendre au pied de la lettre et vérifier que je ne me plante pas.
Pour faire vite, les services sont arrêtés et démarrés en fonction de niveaux d'exécution, les runlevels.
Pour chaque runlevel, on décide d'arrêter ou de démarrer tel ou tel service. Pas de panique, les runlevels par défaut iront très bien ici.
Pour info, ils sont définis dans /etc/inittab :
....
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
......
Bon. Comme tout cela est très bien fait, on ne s'amuse pas à écrire un script pour arrêter ou lancer un service dans chaque runlevel. Il y a un système de nommage des fichiers et de liens symboliques qui font qu'on utilise un seul script par service.
Ces scripts sont ici : /etc/init.d/
Si on veut les lancer ou les arrêter à la main, on fait sudo /etc/init.d/service start|stop|restart (la barre | signifie "ou"). Par exemple, 'sudo /etc/init.d/networking restart' relance les services de configuration réseau.
Nous, on veut faire :
sudo /etc/init.d/g15daemon start|stop|restart
Pour ça, il existe un fichier type qu'on peut copier et personnaliser :
sudo cp /etc/init.d/skeleton /etc/init.d/g15daemon
Dans ton éditeur préféré lancé avec sudo, épure la bête pour arriver à un résultat de ce genre :
#! /bin/sh
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Logitech G15 keyboard daemon"
NAME=g15daemon
DAEMON=/usr/sbin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
Attention, vérifie bien le chemin de ton exécutable, et modifie la constante DAEMON le cas échéant. Pour trouver le chemin :
sudo which g15daemon
Le service est près, plus qu'à l'enregistrer (faire les liens symboliques). Une fois de plus, c'est automagique :
update-rc.d g15daemon defaults
Normalement, ça devrait suffire...
Sans se prendre trop la tête, un p'tit coup d'oeil sur les pages de man adéquates et sur Google histoire de vérifier mes dires est une sage précaution...
Dernière modification par luc Milland (Le 31/10/2006, à 17:54)
http://www.praksys.org
Hors ligne
#3 Le 31/10/2006, à 20:33
- kwenji
Re : lancer une commande au démarrage ?
Merci beaucoup Luc je n'en esperait pas tant...
j'avais installé les pilote à la main à partir de ce HOWTO qui date un peu...
Juste un petit truc que j'ai pas trop compri c'est pour le
sudo echo uinput >> /etc/modules
Je le me dans mon script /etc/init.d/g15daemon ?
Dernière modification par kwenji (Le 31/10/2006, à 20:44)
Hors ligne
#4 Le 02/11/2006, à 11:00
- luc Milland
Re : lancer une commande au démarrage ?
Je le me dans mon script /etc/init.d/g15daemon ?
non non : c'est à taper dans le shell : ça ajoute le texte "uinput" dans /etc/modules (les modules listés dans ce fichier son chargés au démarrage).
http://www.praksys.org
Hors ligne
#5 Le 12/11/2006, à 12:19
- YMulleneers
Re : lancer une commande au démarrage ?
Plus simple sous ubuntu 6.10... Utiliser
(menu système)/Préférence/Sessions/(Onglets)/Programmes de démarages/Ajouter
Voilà. Linux Ca marche et c'est simplissime.
Linux Mint 16
J'aime à utiliser Linux.
Hors ligne