executa o script de inicialização que requer uma sessão do xserver

0

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

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

Um script init.d não funcionará (configurando a variável DISPLAY para 0.0). Usando xvfb-run , o script init.d executou meu script, mas em um ambiente xserver virtual como esperado (não meu). Não há equivalente, que conecta um script init.d à sessão xserver atual?

Até agora, eu tentei um arquivo .xinitrc (em ~/ , sim, ele é executável), além de criar .xprofile, .xsession, .xsessionrc , todos vinculados ao primeiro via ln -s . Eu tentei adicionar gnome-terminal & para testes, mas o terminal também não apareceu, seja depois de reiniciar o lightdm ou até mesmo o PC inteiro e fazer o login novamente.

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

Usando upstart , como sugerido por Execute um script de inicialização com lightdm não forneceria a variável de exibição do xserver (ou handle?), apenas execute-a após lightdm iniciado, correto?

Talvez coloque em algum lugar em xorg.conf ? ( Como posso tornar a customização do xrandr permanente? ) Me bate ..

(Meu script faz listas rápidas de arquivos recentes e os adiciona aos menus rightclick do lançador de unidade, semelhantes às janelas: link )

    
por hirsch 11.02.2016 / 17:35

1 resposta

2

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

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

Em suma

Você precisa executar o script appr. 10-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 script for executável) para os aplicativos de inicialização do usuário: Dash > Aplicativos de inicialização > Adicionar.

Executar para todos os usuários

Se você precisar que o script execute para todos os usuários (após o login), você poderá adicioná-lo aos aplicativos de inicialização para todos os usuários de uma só 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"

salve o arquivo em /etc/xdg/autostart as launch_script.desktop (ou o que quiser, contanto que ele termine com .desktop )

[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application
    
por Jacob Vlijm 11.02.2016 / 19:11