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 06/08/2008, à 21:42

wapit

script pour video et jeux 3d avec compiz

Salut les gens

Ca fait longtemps que je vois que pas mal de monde a le meme probleme que moi: une carte ATI, et la necessité de repasser sous metacity pour voir les videos ou faire de la 3d (jeux...)

Du coup il existe des scripts pour switcher en un cliq de souris.

Ca m'ennuyait de devoir cliquer alors voila la solution:

mettez dans un fichier qu'on va nommer "script_VLC" par exemple:

#!/bin/bash

# This is a small script that disables Compiz, then it
# executes enemy territory, and after you exit et it enables
# Compiz again. This is to be used with Compiz 0.3.4 or higher.

metacity --replace &
sleep 1
vlc $1 && compiz --replace

on le copie dans /bin et on lui donne les droits d'exécution.

Puis on clique droit sur une video / propriétés / ouvrir avec /commande pesonnalisée et mettre:

'/bin/script_VLC'

Tout fermer, cliquer sur la video... magique ca passe tout seul sur metacity, puis ca revient sur compiz quand on feme la video...


Refaire pareil pour toutes les applications qui sont incompatibles avec compiz

Wapit

#2 Le 06/08/2008, à 21:54

wapit

Re : script pour video et jeux 3d avec compiz

petite modif pour faire fonctionner le script avc les fichiers video qui ont des espaces dans leur nom:

#!/bin/bash

# This is a small script that disables Compiz, then it
# executes enemy territory, and after you exit et it enables
# Compiz again. This is to be used with Compiz 0.3.4 or higher.

metacity --replace &
sleep 1
vlc "$1" && compiz --replace

#3 Le 07/08/2008, à 01:44

Gwano

Re : script pour video et jeux 3d avec compiz

Pour les jeux voilà le code que j'utilisais, il a l'avantage de tenir compte des applications lancées avec Cedega ou Wine, et puisque compiz n'est pas remplacé par metacity, la transition est (un peu) plus rapide..

#!/bin/bash
#A vérifier pour 'compiz.real' la commande n'est peut-être plus d'actualité
if [ "`ps -ef |grep 'compiz.real' |grep -v grep`" != "" ]; then
	killall compiz.real
	$@
	sleep 1
	while [ "`ps -ef |grep 'wine' |grep -v grep`" != "" ]
	do
		sleep 2
	done
	compiz --replace
else
	$@
fi

Mais Bon pour les jeux le mieux est de lancer un second serveur X, ce qui permet un retour au bureau aisé (ctrl+F7/ctrl+F9), et plus besoin d'arrêter compiz dans ce cas...

#!/bin/bash
X :1 -ac &
sleep 2
DISPLAY=:1 $@
sleep 1
while [ "`ps -ef |grep 'wineserver' |grep -v grep`" != "" ]
do
    sleep 1
done
kill $(ps ax|grep "X :1")

Copier ce fichier dans /usr/bin/nomFich

ensuite il faut permettre l'exécution d'un second serveur X taper dans un terminal

sudo dpkg-reconfigure x11-common

et choisir "n'importe qui" pour avoir le droit de lancer un second serveurX

Pour lancer le jeu monJeu, il ne reste plus qu'à faire:
nomFich monJeu

#4 Le 07/08/2008, à 14:27

Wapit

Re : script pour video et jeux 3d avec compiz

merci pas mal le changement de serveur X.
Ca ne ralentit pas trop de lancer plusieurs serveurs X?

#5 Le 20/08/2008, à 21:48

Rude Wolf

Re : script pour video et jeux 3d avec compiz

Bonjour,

  Je fait tourner Warcraft 3 sur Hardy. Essentiellement le jeu fonctionne parfaitement, mais lorsque que je fait tourner le jeu avec compiz activé j'ai le désagrément suivant: faire passer le curseur de la souris sur le bord de l'écran ne permet pas toujours d'effectuer un scrolling; il arrive que je perde le focus sur le jeu. C'est pourquoi j'essaie de mettre au point un script permettant de lancer metacity, puis le jeu, puis remettre compiz une fois le jeu terminé.

  J'ai essayé

 wine jeu.exe && action 2

qui me rend le prompt sans effectuer action2. À contrario,

 
#!/bin/bash
wine jeu.exe
action 2

m'execute action2 puis me rend le prompt même si le jeu n'est pas terminé.

  C'est pourquoi tes scripts m'intéressent mais j'aimerai quelques précisions pour mieux les comprendre. Si je comprends bien,

while [ "`ps -ef |grep 'wineserver' |grep -v grep`" != "" ]
do
    sleep 1
done

permet de laisser le script actif tant qu'un processus wineserver existe, ce qui résoud les problèmes que j'ai rencontrés.

  Cette solution m'intéresse aussi.

Mais bon pour les jeux le mieux est de lancer un second serveur X, ce qui permet un retour au bureau aisé (ctrl+F7/ctrl+F9), et plus besoin d'arrêter compiz dans ce cas...

Mais j'aimerai un peu plus de documentation. Si je comprend bien (je n'y connais pas grand chose en script shell).

#!/bin/bash
# Lance un serveur X sur le second affichage puis rend la main au script.
# Mais "man X" rend "No manual entry for X"
X :1 -ac &
# Pause de 2 seconde. Est-ce le temps que le serveur X se lance?
sleep 2
# Définit la variable DISPLAY dont se sert wine pour choisir sur quel affichage se lancer.
# Quel est le rôle de $@ ?
DISPLAY=:1 $@
# Quel est le rôle de sleep 1?
sleep 1
# voir plus haut dans ce billet.
while [ "`ps -ef |grep 'wineserver' |grep -v grep`" != "" ]
do
    sleep 1
done
# Détruit le serveur X lancé plus haut une fois que le processus disparaît.
kill $(ps ax|grep "X :1")

Ou peut-on se documenter sur les risque d'une telle manipulation?

Ensuite il faut permettre l'exécution d'un second serveur X taper dans un terminal

sudo dpkg-reconfigure x11-common

et choisir "n'importe qui" pour avoir le droit de lancer un second serveurX

Est-ce possible de lancer le script avec root comme propriétaire (chown), mais executable par l'utilisateur (chmod +ux).

  Concernant

Pour lancer le jeu monJeu, il ne reste plus qu'à faire:
nomFich monJeu

comment l'argument monJeu est-il utilisé dans le script. Est-ce le « $@ » ? Dans ce cas faut-il lancer nomFich commande _wine ?

edit: conjugaison

Dernière modification par Rude Wolf (Le 21/08/2008, à 17:05)

Hors ligne

#6 Le 22/08/2008, à 03:09

Rude Wolf

Re : script pour video et jeux 3d avec compiz

Bonsoir,

Voici quelques remarques concernant le billet de Gwano. Je pense que l'on peut simplifier

#!/bin/bash
X :1 -ac &
sleep 2
DISPLAY=:1 $@
sleep 1
while [ "`ps -ef |grep 'wineserver' |grep -v grep`" != "" ]
do
    sleep 1
done
kill $(ps ax|grep "X :1")

en quelque chose approchant ceci:

#!/bin/bash
sleep 10 && cd /media/Little\ Big/Jeux/Warcraft\ III/ && ( DISPLAY=:1 $@ ) &
X :1 -ac -terminate || sudo X :1 -ac -terminate

L'avantage de l'ordre 'commande à lancer &' puis 'lancer X' permet de faire en sorte que le shell qui interprète le script ne se termine qu'a la fin de 'lancer X'. Si l'on avait choisi 'lancer X &' puis 'commande à lancer' alors le shell se termine dès que la commande rend le prompt. C'est justement ce qui se passe dans l'exemple qui me motive. La commande 'sleep 10' permet de laisser le temps de saisir le mot de passe sudo si besoin est (dans ce cas lancer le script dans un terminal) et de laisser ensuite le temps au serveur de s'initialiser. La dernière ligne essaie de lancer X comme utilisateur avant de tenter avec sudo.

Cela permet aussi d'utiliser le script pour un lanceur de bureau GNOME, ou de le lancer en double-cliquant dessus, ou par ALT+F2.

Apparemment le script ci-dessus arrête le serveur X, et à sa suite le shell, dès que mon serveur wine s'arrête. L'option -terminate influe manisfestement (après tests). La documentation se trouve à 'man xserver'. Plus précisément.

-terminate
               causes the server to terminate at server reset, instead of con‐
               tinuing  to  run.   This  overrides a previous -noreset command
               line option.

Enfin de la documention sur dpkg-reconfigure x11-common s'obtient par 'man Xwrapper.config'

Hors ligne

#7 Le 17/12/2008, à 02:40

johnny5

Re : script pour video et jeux 3d avec compiz

C'est intéressant ce post... j'ai pas eu l'occasion de tester les scripts encore mais ça viendra avant longtemps.
Une question que je me pose avant, dans le cas par exemple du script de wapit pour lancer vlc:

metacity --replace &
sleep 1
vlc "$1" && compiz --replace

Si je le lance avec une vidéo, et que pendant la lecture de celle-ci j'en lance une autre à côté, à la fin de la première compiz repart à la place de metacity, mais la 2ème n'est pas terminée...

Je ne connais pas trop les scripts sous linux (pas encore, ça aussi ça va venir wink), mais peut-être que quelqu'un saurait comment faire pour que compiz ne reparte seulement lorsque plus aucune autre instance du script ne roule... si vous voyez ce que je veux dire...
D'ailleurs le

metacity --replace

lorsque metacity est déjà en fonction, est-ce que ça ne cause pas problème?

By the way... si quelqu'un connais un bon site pour en apprendre sur les scripts linux, genre tutoriel, je suis preneur:D

Hors ligne

#8 Le 26/12/2008, à 00:32

Rude Wolf

Re : script pour video et jeux 3d avec compiz

johnny5 a écrit :

By the way... si quelqu'un connais un bon site pour en apprendre sur les scripts linux, genre tutoriel, je suis preneur:D

http://doc.ubuntu-fr.org/tutoriel/script_shell
On trouve quelques liens en bas de page. (On peut aussi en rajouter)

Hors ligne

#9 Le 31/12/2008, à 01:00

johnny5

Re : script pour video et jeux 3d avec compiz

Merci Rude Wolf pour le lien, j'ai parcouru ça et je me suis pondu un script pour remplacer compiz par metacity, démarrer une application reçue en paramètre, puis, lorsque l'application ne s'exécute plus, remplacer metacity par compiz.

J'ai appelé le fichier "metacity_start". Donc, si je fais dans un terminal:

metacity_start googleearth

normalement ça part metactiy, part googleearth, attend, part compiz...

Évidemment c'est un premier jet, soyez cléments roll
Vos commentaires seront les bienvenus.

et voilà le script:
[EDIT: modifié la boucle qui vérifie si l'application tourne toujours]

#!/bin/bash
# Le script désactive compiz, lance l'application reçue en paramètre, et réactive compiz une fois l'application terminée.

LOGFILE=metacity_start_log

#initialisation du log...
echo "=============Script de démarrage d'une application en désactivant compiz==================">"$LOGFILE"
echo `date`>>"$LOGFILE"
echo "========================================================================================">>"$LOGFILE"
echo>>"$LOGFILE"

#fonction pour logguer un message.
function do_log {
	
	# Écrire dans le fichier
	echo `date +%H:%M:%S`>>"$LOGFILE"
	echo "$1">>"$LOGFILE"
	echo>>"$LOGFILE"

	# Écrire à l'écran
	echo "$1"
	echo
}

#fonction pour tester le résultat de la dernière commande.
function testerreur {
	CODE=$PIPESTATUS
	if test $CODE -eq 0; then
		echo OK!
		echo
	else
		zenity --error --title="Une erreur est survenue" --text="voir le fichier 'log_start_ge'"
		do_log "erreur code $CODE"
		exit 100;
	fi
}

#tester qu'on a un argument à lancer.
#TODO: Si il y a des arguments on a une erreur. Ex: gedit /nomdefichier => Operateur binaire attendu?
if test -z "$@"; then
{
	do_log "Aucune commande à lancer"
	exit 100;
}
fi


#Si compiz roule...
if test -n "`ps -ef | grep 'compiz' | grep -c grep`"; then
	echo -n "compiz roule, appuler sur une touche pour continuer..." #TODO: y/n pour l'arrêter ou non...
	read

	#tuer compiz
#	do_log "On s'apprète à tuer compiz : killall compiz."
#	killall compiz
#	testerreur

#	do_log "Compiz tué."

	# démarrer metacity
	do_log "On s'apprète à démarrer metacity : metacity --replace"
	
	metacity --replace &
#TODO : metacity --replace retourne un code d'erreur 1, mais il se lance quand même. Lien avec la transparence des fenêtres??
#	donc on teste pas l'erreur...
#	testerreur

	while test -z "`ps -ef | grep metacity | grep -v grep`"
	do
		echo "metacity pas encore démarré"
		sleep 2
	done

#	testerreur

	echo "Metacity est démarré"
	do_log "metacity démarré"
	
	#DÉMARRAGE DE L'APPLICATION
	do_log "Démarrage de '$@'"
	$@ &
	#récupérer le pid.
	APPPID=$!
	testerreur

	sleep 1

	echo "`ps -p $APPPID | grep $APPPID`"
	while test -n "`ps -p $APPPID | grep $APPPID`"
	do
		sleep 2
		do_log "'$@' en cours d'exécution"
	done
	# redémarrer compiz
	do_log "On s'apprète à redémarrer compiz : compiz --replace"

	compiz --replace &
	testerreur

	while test -z "`ps -ef | grep 'compiz' | grep -c grep`"
	do
		echo "compiz pas encore démarré"
		sleep 2
	done

	echo "Compiz démarré"
	do_log "compiz redémarré"
else
	echo -n "compiz ne roule pas, appuyer sur une touche pour continuer..."
	read
	$@
fi

exit 0

Dernière modification par johnny5 (Le 31/12/2008, à 01:10)

Hors ligne

#10 Le 01/02/2010, à 18:34

InAme19

Re : script pour video et jeux 3d avec compiz

Merci pour l'astuce ^^

Ca commençait à m'énerver d'enlever les effets visuels pour désactiver compiz!

Hors ligne

#11 Le 01/02/2010, à 19:45

johnny5

Re : script pour video et jeux 3d avec compiz

Il marche bien le script? Ça fait un bon bout de temps que je l'ai pas essayé...
Si tu fait des corrections ça serait gentil de les poster smile

Hors ligne