Переключение между Unity 3D и Unity 2D
Вообще, я предпочитаю Unity 3D, а не 2D-версию, которая немного сломана на моей машине. Тем не менее, я часто даю презентации, и Compiz не поддерживает несколько экранов. Я был вынужден выходить из 3D и в 2D каждый раз, когда я выступаю с презентацией, а затем возвращаться к 3D, чтобы получить более удобный рабочий стол.
Чтобы избежать этого неудобства, я написал скрипт для переключения между Unity 2D и 3D без выхода из системы. К сожалению, когда я запускаю его из 2D, у меня запускается 3D, плюс панель 2D и панель запуска. Оба на экране одновременно. Я подозреваю, что 2D-процессы, которые я убиваю, как-то возрождаются. Может ли кто-нибудь помочь мне отладить мой сценарий?
#!/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
редактировать
Мой скрипт работает, когда я вхожу в 3D. Это не работает, когда я вхожу в 2D. Таким образом, это работает для моего наиболее распространенного варианта использования, но тот факт, что он не работает наоборот, подсказывает мне, что я делаю что-то не так.
1 ответ
Когда вы запустите metacity --replace, я ожидаю, что он завершит сессию Compiz для вас. Следовательно, возможно, это поможет, если вы не вызываете stop_3d, а просто start_2d. Возможно, теперь вы вручную убиваете 3D, что вызывает перезапуск Compiz, однако перед его перезапуском 2D запускается, но думает, что 3D не работает и, следовательно, не завершает его должным образом (без запуска перезапуска).,
Просто догадка, но ты никогда не знаешь.