
Это может показаться глупой идеей, но мне нравится прозрачная верхняя панель, которую можно настроить в Compiz Config Settings Manager, но когда я возобновляю работу из спящего режима, она больше не прозрачна и дает графический сбой при вызове панели. Это проходит, если я перезапускаю Unity, выполнив команду "unity". Поэтому мне было интересно, можно ли этого добиться? Я попробовал установить скрипт, /etc/pm/sleep.d/
как указано вкак выполнить команду после выхода из режима ожидания?но это не сработало, полагаю, он запускается до того, как я снова вхожу в систему, и Unity возобновляет работу.
Есть ли способ добиться желаемого или мне следует просто сдаться?
решение1
Идти кСистемные настройки > Клавиатура > Сочетания клавиш > Пользовательские сочетания клавиш
и создайте новый:
затем задайте простое сочетание клавиш, например Alt+, Rчтобы легко запустить быстрый перезапуск Unity после приостановки.
Я не страдаю от вашей ошибки, но мне нужно запускать эту команду в каждом новом сеансе, потому что Unity не запоминает привязки ребер в новых сеансах.
решение2
Прямо изруководство для systemd-suspend.service:
Immediately before entering system suspend and/or hibernation systemd-suspend.service (and the other mentioned units, respectively) will run all executables in /usr/lib/systemd/system-sleep/ and pass two arguments to them. The first argument will be "pre", the second either "suspend", "hibernate", or "hybrid-sleep" depending on the chosen action. Immediately after leaving system suspend and/or hibernation the same executables are run, but the first argument is now "post". All executables in this directory are executed in parallel, and execution of the action is not continued until all executables have finished.
Я провел некоторое тестирование и обнаружил, что если вы поместите скрипт (отмеченный как исполняемый всеми, что достигается с помощью chmod a+x
) в/lib/systemd/system-sleep
,без /usr, он будет выполнен, как указано.
Однако, есть один недостаток, который заставляет вас думать, что он не работает: среда другая. Графические командыне работает. Вероятно, есть способ обойти это, но по умолчанию,unity --replace
не удастсяпотому что он не может подключиться к X-серверу (и поэтому никакие команды, которые не работают, если вы нажмете CTRL-ALT-F1 и перейдете в настоящую консоль без вмешательства, работать не будут).
Хорошо, я просто прекратил печатать, чтобы провести небольшое исследование: после просмотрабазовая chroot-вики(потому что у меня была та же проблема в chroot), я обнаружил, что если вручную вызватьxhost +
доприостановка, графические команды (в моем случае zenity --info --text "1:$1 2:$1"
) функционируют правильно. Однако вы не можете вызвать xhost +
из скрипта. Что выможетнужно добавить программу в "автозапускаемые приложения" для автоматического вызова xhost +
при входе в систему (добавьте ее туда, а не в, .bashrc
потому что если ее добавить, .bashrc
она будет запускаться каждый раз при открытии эмулятора терминала). В Unity это может быть по-другому, но в Ubuntu MATE я могу перейти System → Preferences → Personal → Startup Applications
и нажать Добавить, чтобы сделать это.
Затем создайте файл /lib/systemd/system-sleep/restart-unity
со следующим содержимым:
#!/bin/bash
export DISPLAY=:0
if [[ "$1" == "post" && "$2" == "suspend" ]]
then
sleep 5
unity --replace
fi
и запустите sudo chmod a+x /lib/systemd/system-sleep/restart-unity
(убедитесь, что файл принадлежит пользователю root и запись доступна только ему).
Обратите внимание, что этодолжениспользуйте bash
. Это из-за оператора "if". Когда я попробовал оператор вручную в sh
, я получил различные ошибки от &&
части.
Он sleep
там есть, потому что без него unity --replace
не удастся подключиться к X-серверу (или так кажется).
Судя по моим собственным тестам на Zesty, это должно работать.
Я потратил 15 минут, пытаясь понять, почему это не работает, и понял, что забыл строку export DISPLAY=:0
.
решение3
Они кажутся полезными:
Это тот самый глюк, который вы видите?