#1 Le 03/04/2013, à 16:26
- obibann
Service 2d / 3d pour les jeux
Bonjour,
Jouant pas mal sur mon PC portable (Ubuntu 12.10) j'ai créé un service que j'ai appelé "live2d" qui me permet de couper Unity lorsque je lance un jeu afin d’économiser des ressources.
Dans les lanceurs de mes jeux, je place la valeur "1" dans un fichier spécifique pour que le service replace Unity par metacity (que j'ai réinstallé). A la fin du jeu, je met la valeur 0 pour que le service relance Unity.
En gros ce service me permet de couper / relancer Unity sans quitter ma session.
Pourquoi passer par un service ? Et bien parce que j'utilise pas mal PlayOnLinux et que tout processus lancé depuis un script PlayOnLinux est tué lorsque l'on quitte le logiciel (Y-compris le Unity que j'avais relancé ). J'avais donc la mauvaise surprise de me retrouver seul avec mon fond d'écran à chaque fermeture de POL...
Le problème, c'est que mon service ne fonctionne que lorsqu'il est lancé manuellement... Le lancement automatique au démarrage du PC fonctionne (le service tourne, je le vois avec "status" et la commande ps) mais ne fait rien... Passer mon fichier a 1 ne me donne rien.
Voilà, je viens donc vous demander votre aide afin d'essayer de résoudre ce mystère
Merci
Ubuntu 16.04
Avec Windows, on fait ce qu'on peut... Avec Linux, on fait ce qu'on veut !! :p
Hors ligne
#2 Le 03/04/2013, à 18:57
- Haleth
Re : Service 2d / 3d pour les jeux
Avec le code c'est mieux.
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#3 Le 09/04/2013, à 08:46
- obibann
Re : Service 2d / 3d pour les jeux
Et voici, le code.
Le service :
#! /bin/sh -e
DAEMON="/opt/live2d/live2d.sh"
DEAMON_NAME="live2d"
PATH="/sbin:/bin:/usr/sbin:/usr/bin" #Ne pas toucher
. /lib/lsb/init-functions
d_start () {
log_daemon_msg "Starting system $DEAMON_NAME Daemon"
start-stop-daemon --background --name $DEAMON_NAME --start --quiet --exec $DAEMON
log_end_msg $?
}
d_stop () {
log_daemon_msg "Stopping system $DEAMON_NAME Daemon"
mypid=`ps aux | grep $DAEMON | grep -v grep | head -n1 | awk '{print $2}'`
kill -9 $mypid > /dev/null 2>&1
log_end_msg $?
}
case "$1" in
start|stop)
d_${1}
;;
restart|reload|force-reload)
d_stop
d_start
;;
force-stop)
d_stop
killall -q $DEAMON_NAME || true
sleep 2
killall -q -9 $DEAMON_NAME || true
;;
status)
mypid=`ps aux | grep $DAEMON | grep -v grep | head -n1 | awk '{print $2}'`
[ ! -z "$mypid" ] && echo "$DEAMON_NAME is running..." || echo "$DEAMON_NAME is not running."
;;
*)
echo "Usage: /etc/init.d/$DEAMON_NAME {start|stop|force-stop|restart|reload|force-reload|status}"
exit 1
;;
esac
exit 0
Le script faisant le switch 2d/3d :
#!/bin/bash
TRIGGERFILE="/tmp/live2d"
HASBEENSHUT=0
OWNER=root
export DISPLAY=:0
while [ true ]
do
ISRUNNING="`pidof compiz`"
TRIGGER="`head -n1 $TRIGGERFILE 2>/dev/null`"
echo $ISRUNNING
echo $TRIGGER
if [ ! -z "$ISRUNNING" ] && [ "$TRIGGER" == "1" ] ; then
OWNER=`stat -c "%U" $TRIGGERFILE`
echo -n "Killing compiz as $OWNER" | tee -a /var/log/live2d.log
su $OWNER -c "metacity --replace &"
HASBEENSHUT=1
fi
if [ $HASBEENSHUT -eq 1 ] && [ -z "$ISRUNNING" ] && [ "$TRIGGER" != "1" ] ; then
echo "Starting compiz as $OWNER" | tee -a /var/log/live2d.log
#su $OWNER -c "compiz --replace &"
su $OWNER -c "unity --replace &"
rm -f $TRIGGERFILE
HASBEENSHUT=0
fi
sleep 1
done
Ubuntu 16.04
Avec Windows, on fait ce qu'on peut... Avec Linux, on fait ce qu'on veut !! :p
Hors ligne