Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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é smile). 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 hmm

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