execute o script de inicialização que requer uma sessão xserver

execute o script de inicialização que requer uma sessão xserver

Eu tenho um script python3 que usa o Gtk-module (importado de gi.repository, para funcionalidade de gerenciador recente), exigindo um link para a sessão atual do xserver ( lightdmserviço no Ubuntu).

Executá-lo manualmente via console (em uma sessão xserver) funciona, mas quero que ele seja executado automaticamente.

Um script init.d não funcionará (definindo a variável DISPLAY como 0,0). O uso xvfb-runfez com que o script init.d executasse meu script, mas em um ambiente xserver virtual conforme o esperado (não o meu). Não há equivalente que conecte um script init.d à sessão xserver atual?

Até agora eu tentei um .xinitrcarquivo (em ~/, sim, é executável), além de criar .xprofile, .xsession, .xsessionrctodos os links para o primeiro via ln -s. Tentei adicionar gnome-terminal &para teste mas o terminal também não apareceu, seja após reiniciar lightdmou até mesmo o PC inteiro e logar novamente.

Eu também tenteiExecute o script de configuração no resumo da sessão X, mas isso dá o erro Can't open /usr/share/acpi-support/power-funcs.

Usando upstart, como sugerido porExecute um script de inicialização com lightdmtambém não forneceria a variável de exibição xserver (ou identificador?), apenas execute-a depois de lightdminiciada, correto?

Talvez colocá-lo em algum lugar xorg.conf? (Como posso tornar a personalização do xrandr permanente?) Me bate..

(Meu script faz listas rápidas de arquivos recentes e os adiciona aos menus do botão direito do inicializador do Unity, semelhantes ao Windows:https://github.com/thirschbuechler/ubuntu-recentquicklists)

Responder1

Como em muitos casos, o timing é a questão principal aqui.

  1. Seu script precisa ser executado no nível do usuáriodepois de fazer login, pois edita itens do inicializador, que estão no nível do usuário.
  2. Mesmo assim, observando o que o script deve fazer (lendo sua explicação), o script precisa esperar um pouco para que a área de trabalho carregue totalmente; o Unity Launcher não é a primeira coisa a ficar "pronto" após o login. Se o script for executado muito cedo, ele quebrará ou perderá o alvo.

Resumidamente

Você precisa executar o script appr. 10 a 15 segundos após o login, o que pode ser feito adicionando:

/bin/bash -c "sleep 15 && python /path/to/script.py"

(se o script não for executável), ou

/bin/bash -c "sleep 15 && /path/to/script.py"

(se o roteiroéexecutável) para os aplicativos de inicialização do usuário: Dash > Aplicativos de inicialização > Adicionar.

Execute-o portodos os usuários

Se você precisar que o script seja executadopara todos os usuários(após o login), você pode adicioná-lo aos aplicativos de inicialização para todos os usuários de uma vez.

Para fazer isso, copie o código abaixo em um arquivo vazio, edite as linhas começando com Name=e defina o caminho correto para o script na linha:

Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"

em seguida, salve o arquivo /etc/xdg/autostartcomo launch_script.desktop(ou como quiser, desde que termine com .desktop)

[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application

informação relacionada