A seguir estão outras perguntas que acho que preciso saber:
De uma sessão não X? (o que significa que o root não está logado no X)
Se várias pessoas estivessem logadas no X, eu poderia detectar automaticamente quem estava em qual tela e, assim, detectar programaticamente em qual tela preciso iniciar o aplicativo?
Posso iniciar o aplicativo como usuário? (ok, tenho 99,999% de certeza de que isso é um sim)
Posso detectar se os usuários do grupo X estão conectados ao X?
naga_plugged.pl
script termine (ou bifurque-se em segundo plano), poisudev
estará aguardando sua saída.Respostas:
Para iniciar um programa gráfico na área de trabalho de um usuário, você precisa encontrar duas coisas: qual tela 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 nas quais o usuário está conectado (um por linha) na maioria das unidades:
Encontrar o cookie de autorização é um pouco mais difícil. Você precisa procurar o arquivo de cookies do usuário, que é o
~/.Xauthority
padrão (tudo o que você precisa é o local do arquivo de cookies, não é necessário extrair o cookie). Isso funciona em muitos sistemas, mas não em todos; depende do gerenciador de exibição e de como é configurado, e em particular o Gdm (o padrão no Ubuntu) não usou o local padrão pela última vez que olhei. 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 detalhe do processo X e procurar o argumento para a-auth
opção. Outra maneira é encontrar um processo em execução no servidor X e pegar suaXAUTHORITY
variável environmentemnt. Se você tiver problemas para encontrar o arquivo de cookie, consulteAbrir uma janela em um monitor X remoto (por que "Não é possível abrir o monitor")?Depois de ter as duas informações, coloque a exibição escolhida na
DISPLAY
variável de ambiente, o arquivo de cookie da autoridade X escolhido naXAUTHORITY
variável de ambiente e você estará definido. Não importa em qual usuário o programa é executado; combine comsu
se quiser.fonte
ps
ouhtop
ou…pids=$(pgrep -u $target_user nautilus)
recebe o pid, e onde eu tenho que colocar uma-auth
opção?-auth
opção em lugar algum. Pode ser necessário procurá-lo na linha de comando do processo do servidor X para descobrir o que colocar naXAUTHORITY
variável de ambiente. Se você possui o processo de um cliente, o que você precisa não é nada,-auth
mas o valor daXAUTHORITY
variável desse cliente . Não entendo o que você está tentando fazer. Você pode fazer uma nova pergunta.Não posso tentar isso completamente, pois todas as minhas máquinas têm o root desativado.
Para descobrir em qual tela um usuário está, você pode usar o
who
comando A última coluna de saída é geralmente o DISPLAY no qual o usuário está conectado. Algo assim pode ser usado para capturar apenas a tela (provavelmente existe uma maneira muito mais eficiente de fazer isso, fique à vontade para oferecer edições):Em seguida, para lançar um comando gráfico X nessa exibição:
onde: 0 seria substituído por qualquer exibição que você encontrasse no primeiro comando e o firefox seria substituído pelo comando que você deseja executar. Você pode colocar isso em um script de shell e apenas usar uma variável.
A próxima parte é a parte que não testei, mas não vejo por que não deveria ser possível:
para iniciar o comando X como esse usuário.
fonte
sudo -i
e não podia ter certeza se os resultados seriam diferentes do que executá-lo depois de efetuar o login como root diretamente. :-)who | grep xeno| awk '{print $5}' | sed 's/[(|)]//g' | grep -v ^$
parece funcionar ...Você pode ver como isso é acido. Por exemplo, quando emite comandos xscreensaver ou apaga a tela para cada usuário que executa a sessão X ou X.
Por exemplo, no Ubuntu, este arquivo contém itens relacionados:
Contém este loop:
fonte
/usr/share/acpi-support/power-funcs
. Ele chamafgconsole
para encontrar o Linux vt ativo, depois procura um servidor X exibido nesse console e descobre o usuário a partir daí. Em seguida, ele é usado~/.Xauthority
como o cookie X, que, a menos que haja algo que esteja faltando, significa que ele não poderá realmente se conectar ao servidor X (a configuração padrão do Ubuntu, usando gdm, não armazena os cookies X na casa do usuário diretório).getXuser: command not found
Uma extensão da resposta de Gilles é como encontrar o arquivo de cookie. Uma maneira de fazer isso pode ser depois que você definir a
DISPLAY
variável de ambiente (conforme descrito por Gilles), usestrace
para encontrar oxhost
acesso aos arquivos . Eu posso pensar em algo assim no BASH:A saída do código acima será semelhante a:
Como você pode ver claramente, o arquivo de cookie aparecerá diretamente aqui.
fonte
Em minha pesquisa para encontrar uma maneira elegante de exibir tarefas da GUI ou X em ambientes limitados, como regras do udev ou do superusuário, criei recentemente uma ferramenta para se ajustar a ela ( para obter mais detalhes ).
xpub
é um script de shell para obter as variáveis do ambiente de exibição do X em relação ao atual ou a um determinado TTY.Este é um exemplo com uma regra do udev:
$env{ENV}
: se o usuário-tty atual iniciar o X, remova-o.O princípio é o mesmo para uma linha de comando usando
export
:fonte