Para iniciar um programa gráfico na área de trabalho de um usuário, você precisa encontrar duas coisas: em que exibição a área de trabalho do usuário está (o endereço) e qual cookie de autorização usar (a senha).
O comando a seguir deve listar as exibições locais em que o usuário está conectado (uma por linha) na maioria dos unices:
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Encontrar o cookie de autorização é um pouco mais difícil. Você tem que procurar o arquivo de cookie do usuário, que é ~/.Xauthority
por padrão (tudo que você precisa é o local do arquivo de cookie, você não precisa extrair o cookie dele). Isso funciona em muitos sistemas, mas não em todos; isso depende do gerenciador de exibição e de como ele está configurado e, em particular, o Gdm (o padrão no Ubuntu) não utilizou a localização padrão por último. Não consigo pensar em uma maneira portátil de descobrir o arquivo de cookie X real. A maneira mais precisa de descobrir é descobrir o pid do processo X e procurar o argumento para a opção -auth
. Outra maneira é encontrar um processo em execução nesse servidor X e pegar sua variável XAUTHORITY
environemnt. Se você tiver problemas para encontrar o arquivo de cookie, consulte Abra uma janela em um display X remoto (por que" Não é possível abrir a tela ")?
Quando tiver as duas informações, coloque a exibição escolhida na variável de ambiente DISPLAY
, o arquivo de cookie de autoridade X escolhido na variável de ambiente XAUTHORITY
e você está definido. Não importa qual usuário o programa executa; combine com su
se quiser.