Esta é uma decisão upstream vinda do Debian. A justificativa para isso é explicada neste post wiki muito agradável , do qual o seguinte é um trecho. O resumo executivo é "para garantir que os logins da GUI e não da GUI funcionem da mesma maneira":
Vamos considerar o xdm como um exemplo. pierre volta das férias um dia e descobre que o administrador do sistema instalou o xdm no sistema Debian. Ele efetua login muito bem e o xdm lê seu arquivo .xsession e executa o fluxbox. Tudo parece estar bem até que ele receba uma mensagem de erro no local errado! Como ele substitui a variável LANG em seu .bash_profile e como o xdm nunca lê .bash_profile, sua variável LANG agora está definida como en_US em vez de fr_CA.
Agora, a solução ingênua para esse problema é que, em vez de iniciar o "xterm", ele poderia configurar seu gerenciador de janelas para iniciar o "xterm -ls". Este sinalizador informa ao xterm que, em vez de iniciar um shell normal, ele deve iniciar um shell de login. Sob essa configuração, o xterm gera / bin / bash, mas coloca "- / bin / bash" (ou talvez "-bash") no vetor de argumento; portanto, o bash age como um shell de login. Isso significa que toda vez que ele abrir um novo xterm, ele lerá / etc / profile e .bash_profile (comportamento bash embutido) e, em seguida, .bashrc (porque .bash_profile diz para fazer isso). Isso pode parecer funcionar bem no começo - seus arquivos de ponto não são pesados, então ele nem percebe o atraso - mas há um problema mais sutil. Ele também lança um navegador da web diretamente do menu do fluxbox, e o navegador da Web herda a variável LANG do fluxbox, que agora está definido como o código de idioma errado. Portanto, enquanto seus xterms podem estar bem, e qualquer coisa lançada a partir dele pode estar bem, seu navegador ainda está fornecendo páginas no local errado.
Então, qual é a melhor solução para esse problema? Realmente não existe um universal. Uma abordagem melhor é modificar o arquivo .xsession para algo parecido com isto:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Isso faz com que o shell que está interpretando o script .xsession leia em / etc / profile e .bash_profile, se eles existirem e forem legíveis, antes de executar o xmodmap ou o xterm ou "executar" o gerenciador de janelas. No entanto, há uma desvantagem potencial nessa abordagem: no xdm, o shell que lê .xsession é executado sem um terminal de controle. Se / etc / profile ou .bash_profile usarem comandos que pressupõem a presença de um terminal (como "fortuna" ou "stty"), esses comandos poderão falhar. Essa é a principal razão pela qual o xdm não lê esses arquivos por padrão. Se você usar essa abordagem, verifique se todos os comandos em seus "arquivos de ponto" são seguros para executar quando não houver terminal.
-n "$BASH_VERSION"
seria verdade fora do bash?