O Gnome 3.22 usa wayland por padrão. O gnomo no wayland não lê ~/.profile
(ou ~/.bash_profile
ou /etc/profile
). Consulte https://bugzilla.gnome.org/show_bug.cgi?id=736660 .
Eu tenho meus arquivos de inicialização configurados da seguinte maneira:
.bash_profile
não faz nada além de fonte.profile
e.bashrc
.profile
define apenas variáveis de ambiente comoPATH
eLC_MESSAGES
.bashrc
define algumas configurações e aliases específicos do bash e variáveis de ambiente para aplicativos comoless
egrep
.
O efeito (antes do wayland) foi o seguinte:
- quando eu logar graficamente
.profile
era lido e variáveis de ambiente comoPATH
eLC_MESSAGES
foram definidas. quando abro o bash dentro de um emulador de terminal, então.bashrc
era lido. - quando eu entrar em um terminal virtual, em seguida,
.bash_profile
foi lido, que por sua vez lê.profile
e.bashrc
. - quando eu faço login usando ssh, o comportamento é semelhante ao terminal virtual.
Em todos os casos .profile
e .bashrc
foi lida e meu ambiente foi criado.
Então agora o gnome 3.22 usa wayland e wayland não lê .profile
. Como posso configurar meus arquivos de inicialização para que eu tenha novamente os efeitos descritos acima?
Note que eu não insisto que certos arquivos (como .profile
) sejam lidos. O que eu quero é que meu ambiente seja configurado de maneira sensata. Isso significa que quero manter configurações específicas do bash nos arquivos de inicialização do bash e outras configurações em outros arquivos de inicialização. Também gostaria de não copiar as configurações em arquivos diferentes.
Eu uso o arch linux. Respostas para todas as distribuições são bem-vindas. Ao sugerir uma solução alternativa, descreva também os efeitos colaterais e as vantagens e desvantagens.
atualização novembro de 2017: pelo que entendi, os desenvolvedores do gnome reconheceram que as pessoas esperam que seus arquivos de configuração do shell de login ( .profile
e .bash_profile
no caso do bash) sejam originados após o login. independentemente do texto ou login gráfico. portanto, meu caso de uso descrito acima funciona novamente.
ainda assim, os desenvolvedores do gnome querem deixar de iniciar um shell de login. parece que a direção que eles estão seguindo é usar o environmentd do systemd:
https://in.waw.pl/~zbyszek/blog/environmentd.html
parece que levará um tempo até que todos os métodos de login sejam adaptados ao environmentd.
fonte
Esta é a solução alternativa que eu uso exatamente para o mesmo problema:
Passo 1
Crie um script que origine
~/.profile
e torne esse script executável. Vamos chamá-lo/path/to/startup.sh
. Pode ser algo como isto:Passo 2
Crie um aplicativo da área de trabalho para executar o script. Para fazer isso, você precisa criar um
.desktop
arquivo e colocá-lo~/.local/share/applications
(ou/usr/share/applications
se desejar que ele funcione para todos os usuários). Vamos chamá-lo~/.local/share/applications/startup.desktop
. Pode ser algo como isto:Para mais informações sobre
.desktop
arquivos, clique aqui .etapa 3
Sair. Faça login novamente. Agora você deve poder procurar seu aplicativo no menu de aplicativos.
Passo 4
Defina este aplicativo como um aplicativo de inicialização. Para fazer isso, usei a Ferramenta Gnome Tweak e adicionei meu aplicativo à lista na guia Aplicativos de inicialização.
E é isso! Agora você deve recuperar sua funcionalidade antiga sempre que efetuar login. Também preserva a estrutura do arquivo intacta; portanto, quando o bug no Wayland é corrigido, basta remover o aplicativo da lista de aplicativos de inicialização e excluir os dois arquivos. e tudo voltou ao normal.
Edição posterior
Como o @Guss aponta nos comentários, essa solução alternativa não exportará variáveis de ambiente porque
startup.sh
é executada em seu próprio shell. Então, precisamos de outra solução alternativa para eles.Lendo a documentação do GNOME, você pode ver que existem algumas alternativas. O único que eu pude trabalhar foi criar um arquivo
/usr/share/gdm/env.d/
e, nesse arquivo, colocar as variáveis a serem exportadas. No entanto, isso significa que as variáveis serão exportadas para todos os usuários, então o que acabei fazendo é o seguinte:Digamos que temos dois usuários, john e sally . Para cada um deles criar um arquivo
/usr/share/gdm/env.d/
, vamos chamá-losstartup_john.env
estartup_sally.env
. Nesses arquivos, coloque as variáveis de ambiente a serem exportadas quando iniciarem uma nova sessão do GNOME.Neste ponto, o problema é que os dois arquivos serão carregados para os dois usuários. Para resolver isso, definimos a permissão em cada arquivo, de modo que somente seu proprietário possa ler seu conteúdo.
Não é a solução mais elegante, eu concordo, mas, até onde eu testei, parece fazer o trabalho.
fonte
startup.sh
está executando em seu próprio shell e não exportará variáveis de ambiente para um contexto de execução pai. Como exemplo, tente executar este código em seu shell:echo "a is $a"; (export a="B"); echo "a is $a"
. De acordo com o @Tudor, a saída do segundo eco seráa is B
, o que - você verá quando executar o código - não é o que acontece.