Se eu entendi corretamente, você deseja suspender suas máquinas VB antes que sua sessão de bash em tty3 termine, ou antes que seu Xserver termine.
Acredito que o systemd não esteja ciente de sua Xsession em execução, porque você o inicia a partir do seu .bashrc, portanto, será difícil dizer ao systemd para suspender seus VBs antes que ele encerre seu shell ou sua Xsession. Você terá que encontrar um lugar na seqüência de desligamento que seja "cedo o suficiente", o que pode ser difícil de encontrar e semanticamente questionável, porque ele misturaria "coisas do usuário" com "coisas do sistema"
As soluções podem depender um pouco de como o systemd encerra seus processos, mas o seguinte deve ao menos apontar uma boa direção:
Antes de o shell terminar
suspendVB() {
echo "suspending VBs"
# put real code here
exit
}
trap suspendVB EXIT
Se você fizer deste o rcfile do seu bash (ou adicioná-lo ao .bashrc), então o código em suspendVB()
será executado antes do shell terminar. Você pode testar isso executando
bash --rcfile xxx
em que o arquivo xxx
contém o código acima. Isso inicia outro shell dentro do seu shell atual, apenas para testes. Quando você executar uma saída simples, verá:
martin@beaureve:~$ exit
exit
suspending VBs
/home/martin >
e você está de volta ao seu shell original (login).
Você pode ter que descobrir como o systemd realmente encerra seus shells de login, e você pode ter que substituir EXIT
por algum outro sinal (s). Pesquise o comando trap
para saber mais.
Note que quando o systemd mata seus processos com "-9" (SIGKILL) então você não será capaz de interceptar a terminação, ou seja, você está sem sorte.
Antes do término da Xsession
Alternativamente, você pode tentar uma coisa semelhante com o seu Xsession. Isto é essencial nos casos em que o systemd termina sua Xsession antes de terminar seus shells. Você pode querer inserir uma armadilha em um dos arquivos de inicialização do X (por exemplo, .xinitrc) - procure as páginas de manual para startx
e xinit
para descobrir mais.
Se o seu arquivo startx
for parecido com o meu, o xserver será iniciado em primeiro plano e você poderá simplesmente colocar seus comandos suspensos após a linha onde o X está realmente iniciado (e não usar traps):
xinit "$client" $clientargs -- "$server" $display $serverargs
retval=$?
echo " --- suspending VBs ---"
Eu coloquei na linha dizendo "suspendendo VBs" e quando eu corro startx -- vt8
eu recebo uma sessão fullblows (kde) em vt8 e somente quando eu sair, a linha "suspendendo VBs" aparece na tela.