É possível executar um aplicativo que requer GUI da sessão SSH para a sessão Desktop, se você realmente precisar dele. Eu estou usando a seguinte abordagem para lançar máquinas virtuais VMWare quando eu precisar deles, mas eu não estou na frente do computador.
Gostaria de enfatizar que você mencionou que está se conectando ao Ubuntu Server, que não possui o ambiente Desktop instalado por padrão. E nesse caso vale a pena usar tmux
ou screen
, ou empurrar o script para o segundo plano ou usar uma segunda sessão SSH. Se um ambiente de área de trabalho for instalado no servidor , as etapas a seguir poderão ser aplicadas.
Os scripts a seguir funcionam com Lightdm e Unity, que são padrão para o Ubuntu 16.04.
1. O primeiro requisito é que o usuário esteja logado na sessão Desktop. Que eu estou usando para conseguir isso é o seguinte script ( fonte e explicações ):
#!/bin/bash
# NAME: lightdm-auto-login
main() {
# If the file '/etc/lightdm/lightdm.conf' exists create a backup copy
[[ -f /etc/lightdm/lightdm.conf ]] && mv /etc/lightdm/lightdm.conf{,.bak}
# Create autologin configuration for the current $USER = $1
echo -e "[Seat:*]\nautologin-user=$1" > /etc/lightdm/lightdm.conf
# Restart 'lightdm' while autologin option is enabled
systemctl restart lightdm.service
# Wait for a moment to complete the login process and remove the conf file
sleep 30 && rm /etc/lightdm/lightdm.conf
# Restore the backup if exists
[[ -f /etc/lightdm/lightdm.conf.bak ]] && mv /etc/lightdm/lightdm.conf{.bak,}
}
# Execute the 'main()' function with root privileges in the background 'sudo -b'
# Pass the curent $USER as arg (https://unix.stackexchange.com/a/269080/201297)
sudo -b bash -c "$(declare -f main); main $USER"
-
O script deve ser executado como usuário regular (que pertence ao grupo sudoers).
-
Eu preferiria colocar o script em /usr/local/bin
para ser acessível como todo o sistema de comandos shell. Não se esqueça de torná-lo executável.
2. Em segundo lugar, poucas variáveis de ambiente (como $DISPLAY
, etc.) devem ser exportadas da sessão Desktop para a sessão SSH. O script a seguir fará isso e também lançará os comandos que são passados como parâmetros posicionais ( fonte e explicações ):
#!/bin/bash -e
# NAME: gui-launcher
# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done
# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")
# Execute the input command
nohup "$@" >/dev/null 2>&1 &
exit 0
-
O script funcionará até que o usuário esteja logado, incluindo uma tela bloqueada.
-
Eu preferiria colocar o script em /usr/local/bin
para ser acessível como todo o sistema de comandos shell. Não se esqueça de torná-lo executável.
3. Uso:
- Estabeleça a sessão SSH;
- Executar
lightdm-auto-login
;
-
Execute gui-launcher <commands or script>
, para exemplo :
gui-launcher gnome-terminal -x bash -c "<my command or script>; exec bash"
Observe o último subcomando exec bash
manterá aberto o gnome-terminal
aberto, depois que o comando anterior terminar.
4. Demonstração: