
Isso pode parecer uma ideia estúpida, mas eu gosto de ter um painel superior transparente que pode ser configurado no Compiz Config Settings Manager, mas quando eu retomo de uma suspensão, ele não é mais transparente e apresenta uma falha gráfica ao invocar o painel. Isso desaparece se eu reiniciar o Unity executando o comando "unity". Então eu queria saber se era possível conseguir isso? Tentei definir um script /etc/pm/sleep.d/
conforme indicado emcomo executar um comando após retomar da suspensão?mas não funcionou, acho que foi executado antes de eu fazer login novamente e o Unity ser retomado.
Existe alguma maneira de conseguir o que quero ou devo simplesmente desistir?
Responder1
Vá paraConfigurações do sistema > Teclado > Atalhos > Atalhos personalizados
e crie um novo:
em seguida, defina um atalho de teclado fácil como Alt+ Rpara executar facilmente uma reinicialização rápida do Unity após a suspensão.
Não sofro com o seu bug, mas preciso executar este comando em cada nova sessão porque a unidade não se lembra das ligações de borda em novas sessões.
Responder2
Diretamente deo manual para 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.
Fiz alguns testes e descobri que se você colocar um script (marcado como executável por todos, que pode ser alcançado com chmod a+x
) em/lib/systemd/system-sleep
,sem o /usr, ele será executado conforme mencionado.
No entanto, há uma desvantagem que faz você pensar que não está funcionando: o ambiente é diferente. Comandos gráficosnão funciona. Provavelmente existe uma maneira de contornar isso, mas por padrão,unity --replace
vai falharporque ele não pode se conectar ao servidor X (portanto, nenhum comando que não funcione se você pressionar CTRL-ALT-F1 e entrar em um console real sem adulteração funcionará).
Ok, parei de digitar para fazer uma pesquisa: depois de olhar owiki chroot básico(porque tive o mesmo problema no chroots), descobri que se você chamar manualmentexhost +
antessuspendendo, os comandos gráficos (no meu caso zenity --info --text "1:$1 2:$1"
) funcionam corretamente. No entanto, você não pode ligar xhost +
a partir do script. O que vocêpodeO que fazer é adicionar um programa aos "aplicativos de inicialização" para chamar automaticamente xhost +
quando você fizer login (adicione-o lá e não, .bashrc
porque se adicionado a .bashrc
ele será executado toda vez que você abrir um emulador de terminal). Pode ser diferente no Unity, mas no Ubuntu MATE posso acessar System → Preferences → Personal → Startup Applications
e clicar em Adicionar para fazer isso.
Em seguida, crie um arquivo /lib/systemd/system-sleep/restart-unity
com o seguinte conteúdo:
#!/bin/bash
export DISPLAY=:0
if [[ "$1" == "post" && "$2" == "suspend" ]]
then
sleep 5
unity --replace
fi
e execute sudo chmod a+x /lib/systemd/system-sleep/restart-unity
(certifique-se de que o arquivo pertence ao root e só pode ser gravado pelo root).
Observe quedeveusar bash
. Isso ocorre por causa da instrução "if". Quando tentei a instrução manualmente sh
, recebi vários erros da &&
parte.
O sleep
existe porque sem ele unity --replace
não será possível conectar-se ao servidor X (ou pelo menos é o que parece).
Com base nos meus próprios testes no Zesty, isso deve funcionar.
Passei 15 minutos tentando descobrir por que não estava funcionando, apenas para perceber que havia esquecido a export DISPLAY=:0
linha.