Execute o gancho de inicialização do XMonad somente na inicialização inicial

4

Eu tenho o seguinte startupHook no meu xmonad.hs

, startupHook = spawn "~/.xmonad/autostart"

Estou iniciando muitos aplicativos e daemons neste script e ele foi escrito para ser executado somente uma vez na inicialização. Mas isso está sendo executado toda vez que eu acesso Mod-q , ou seja, para recarregar e testar minhas alterações para xmonad.hs .

Eu poderia executar condicionalmente os programas no script autostart, mas isso se mostrou bastante esquisito. Então, eu queria saber se há uma maneira de xmonad para executar este gancho de inicialização apenas na inicialização inicial e não em recarregamentos.

Eu tentei pesquisar, mas fiquei vazio. Isso é possível?

Edit: Estou executando o xmonad 0.11 instalado a partir do cabal no Ubuntu 12.04.

    
por Shrikant Sharat 12.02.2013 / 11:20

3 respostas

5

Como mencionado na FAQ , o startupHook é executado toda vez que xmonad é reiniciado com < kbd> MOD + Q .

Também do ponto de vista do software, parece importante que um restart não seja diferente de um stop seguido por um start . Assim, não há como diferenciar um start de um restart dentro do Xmonad. Portanto, cada vez que o Xmonad for iniciado, ele iniciará o startupHook

Para executar programas na inicialização, eles propõem usar a maneira usual adicionando-os a .xsession ou .Xinitrc .

No seu caso, você pode simplesmente colocar

~/.xmonad/autostart

no final do seu arquivo .Xinitrc .

    
por 01.05.2013 / 09:20
2

Uma solução um pouco desonesta se você estiver usando o Ubuntu, e possivelmente outros sistemas baseados no Debian, e tiver instalado o XMonad através do seu gerenciador de pacotes (o que realmente não ajuda a pessoa que fez a pergunta inicial, mas pode ajudar os outros ):

Adicione os programas que você deseja lançar no ~/.xmonad/xmonad-session-rc , como se fosse um script bash (você não precisa torná-lo executável).

Explicação

No Ubuntu, o XMonad é iniciado a partir da tela de login, graças a /usr/share/xsessions/xmonad.desktop . O programa executado por ele não é xmonad , mas o script xmonad-session (presente em /usr/bin/xmonad ), que origina .xmonad/xmonad-session-rc e, portanto, o conteúdo desse arquivo será executado quando você fizer login pela primeira vez em xmonad.

A solução alternativa é um pouco desonesta, pois acho que a finalidade do arquivo xmonad-session-rc era definir variáveis de ambiente, não executar programas, mas não tenho certeza.

    
por 05.02.2017 / 23:53
2

Se você usar o xmonad-contrib, simplesmente import Xmonad.Util.SpawnOnce e, em seguida, usará spawnOnce em vez de spawn no seu gancho de inicialização.

    
por 10.08.2017 / 05:39