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 ( lightdm
serviç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-run
fez 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 .xinitrc
arquivo (em ~/
, sim, é executável), além de criar .xprofile, .xsession, .xsessionrc
todos 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 lightdm
ou 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 lightdm
iniciada, 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.
- 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.
- 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/autostart
como 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