En général, je préfère de loin Unity 3D à la version 2D, qui est un peu cassée sur ma machine. Cependant, je fais souvent des présentations, et Compiz ne prend pas en charge les écrans multiples. J'ai été obligé de me déconnecter de la 3D et de passer en 2D à chaque fois que je fais une présentation, puis de revenir à la 3D après pour obtenir un bureau plus utilisable.
Pour éviter ce désagrément, j'ai écrit un script pour basculer entre Unity 2D et 3D sans nécessiter de déconnexion. Malheureusement, lorsque je l'exécute depuis la 2D, je me retrouve avec la 3D en cours d'exécution, plus le panneau 2D et le lanceur. Les deux sont sur l'écran simultanément. Je soupçonne que les processus 2D que je tue sont relancés d'une manière ou d'une autre. Quelqu'un peut-il m'aider à déboguer mon script ?
#!/bin/bash
set -x
unity_2d="unity-2d-places unity-2d-launcher unity-2d-panel unity-2d-spread"
start_2d() {
metacity --replace &
for i in $unity_2d; do
"$i" &
done
}
stop_2d() {
killall $unity_2d # The lack of quotes around $unity_2d is deliberate.
}
start_3d() {
unity --replace &
}
stop_3d() {
: # no-op for now
}
if ps -u "$USER" | grep -q [m]etacity; then
# Unity 2D is currently running.
stop_2d
start_3d
else
# Unity 3D is currently running.
stop_3d
start_2d
fi
Modifier
Mon script fonctionne lorsque je me connecte à 3D. Il ne fonctionne pas lorsque je me connecte en 2D. Donc, il fonctionne pour mon cas d'utilisation le plus courant, mais le fait qu'il échoue dans l'autre sens me suggère que je fais quelque chose de mal.