O outro componente que está faltando é o arquivo .Xauthority . Ele contém um "cookie de sessão" que é gerado novamente a cada vez que um servidor X11 é reiniciado, e o cliente é obrigado a recebê-lo para enviar qualquer comando ao servidor X11. Esse arquivo está normalmente localizado em ~/.Xauthority , embora você possa usar a variável de ambiente $XAUTHORITY para especificar um local alternativo.
Para controlar a sessão da GUI que não é sua, você precisará obter acesso ao cookie da sessão dessa outra sessão. Se tiver um valor $DISPLAY diferente, você poderá simplesmente copiar o cookie da sessão no arquivo .Xauthority usando os comandos xauth extract e xauth merge :
su newuser -c "xauth extract /home/newuser/.Xauthority $newuserDISPLAY" | xauth merge
O arquivo .Xauthority pode conter vários cookies de sessão para diferentes DISPLAYs ao mesmo tempo.
Ou, se o cookie da sessão estiver localizado em um arquivo que já está acessível para você, use a variável $XAUTHORITY para apontá-lo.
Isso está começando a parecer um problema XA : você tem algo que deseja alcançar e pode ter xdotool como a maneira assumida de fazer isso.
Mas quando você está tentando automatizar algo, passar pelos movimentos da GUI usando xdotool é geralmente a maneira menos conveniente de fazer isso. Por exemplo, se você deseja automatizar a inicialização do Google Chrome como um usuário específico, não é necessário simular o clique em um ícone: basta organizar a identidade e o ambiente corretos e iniciar o processo desejado.
Por exemplo, para iniciar google-chrome como usuário newuser , você pode fazer:
su -lc "DISPLAY=<whatever> google-chrome" newuser
Como o comando su tem a opção -l , o processo google-chrome terá o $HOME correto para o novo usuário e, portanto, procurará .Xauthority no local padrão, ou seja, ~newuser/.Xauthority . Você só precisa fornecer o valor correto para a variável $DISPLAY que corresponda à sessão real da GUI em execução de newuser . Se você quiser que o Google Chrome abra uma URL específica, você pode especificá-lo como um argumento para google-chrome entre aspas duplas.
