
Eu tenho que definir uma variável de ambiente chamada GDK_NATIVE_WINDOWS
para corrigiro problema com os botões do Eclipse no Ubuntu. Para definir a variável de ambiente, adicionei a seguinte linha ao arquivo ~/.pam_environment
.
GDK_NATIVE_WINDOWS DEFAULT = verdadeiro
Surpreendentemente, a variável de ambiente não é definida quando estou echo $GDK_NATIVE_WINDOWS
em um terminal. No entanto, todas as outras variáveis de ambiente listadas ~/.pam_environment
estão definidas corretamente. Além disso, quando mudo para um tty, por exemplo Alt+Ctrl+F1
, a variável de ambiente é definida corretamente. O que há de errado em definir essa variável de ambiente ~/.pam_environment
?
Responder1
Atenha-se à sintaxe simples "key=value" no arquivo ~/.pam_environment. Sem DEFAULT, OVERRIDE, ${HOME}, sem nada. Apenas chave = valor. A página de manual à qual você vinculou é apenas para pam_env.conf. Consulte "man 8 pam_env" que não promete mais nada "Este módulo também pode analisar um arquivo com pares simples KEY=VAL em linhas separadas.".
A propósito, colocar algo como PATH=${PATH}:more/paths em ./pam_environment é uma ótima maneira de quebrar quase qualquer tentativa de login, já que o PATH é definido como ${PATH}:more/pathsliteralmente(não há muito para ser encontrado lá). Para resgatar, "/bin/mv .pam_environment out_of_the_way" e faça login novamente.
Responder2
Como você identificou, suas variáveis de ambiente devem ser definidas ~/.pam_environment
conforme recomendado emhttps://help.ubuntu.com/community/EnvironmentVariables. Mais fácil falar do que fazer ;)
É possível que você tenha encontrado a mesma lacuna de configuração que existia para mim. Veja a solução alternativa para casa criptografada abaixo.
Meu ~/.pam_environment
:
PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK DEFAULT=${HOME}/Applications/jdk
Por que o feio caminho estático? ${PATH}
não funcionaria para mim. Eu bloqueei meu login várias vezes tentando contornar isso, então estou mantendo a feia cópia estática dos padrões :)
Solução alternativa para pastas iniciais criptografadas
Em versões do Ubuntu até e incluindoUbuntu 12.04(Precise Pangolin) Beta 2, se você estiver usando um diretório inicial criptografado, precisará modificá-lo /etc/pam.d/common-session
para carregá-lo ~/.pam_environment
. Esta solução aparentemente funciona para versões anteriores, mas não a testei.
Guenther Montag (g-montag) escreveu em 19/08/2010:
Este parece ser um problema com diretórios pessoais criptografados. Eu adicionei
sessão necessária pam_env.so
no final de /etc/pam.d/common-session e agora ~/.pam_environment é lido. Em outro sistema sem diretórios pessoais criptografados (também 10.04), a solução alternativa não é necessária. Talvez no meu caso o sistema tente ler ~/.pam_environment antes de ser descriptografado.
Responder3
Você tem um espaço entre GDK_NATIVE_WINDOWS e DEFAULT=true . Isso difere do exemplo que você vinculou.
Tentar:
GDK_NATIVE_WINDOWS=verdadeiro
Responder4
No Debian bullseye (provavelmente por volta de 2013) e no Ubuntu até pelo menos 14.04 (testado em um contêiner docker), ~/.pam_environment não é lido por user_endir, o padrão é off para pam_env (consulte Recursos man 7 pam_env
). Se você quiser reativá-lo:
echo 'session optional pam_env.so user_readenv=1' >> /etc/pam.d/common-session
isto é, defina para uma sessão interativa (CLI ou logins gráficos, como su) o pam_env com user_reader em 1.
Acredito que o upstream foi desativado devido a:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708"O módulo pam_env no Linux-PAM (também conhecido como pam) 1.1.2 e anteriores lê o arquivo .pam_environment no diretório inicial de um usuário, o que pode permitir que usuários locais executem programas em um ambiente não intencional, executando um programa que depende do PAM pam_env verificar. "
Achei que a descrição acima não estava clara para mim. Se isso significa que ~/.pam_environment permite alterar o ambiente do programa sem que o usuário saiba, então qualquer opção na pasta inicial é semelhante (ou seja, ~/.profile, ~/.zprofile). Lembre-se de que ~/.profile deve ser lido por gerenciadores de login gráficos ... então por que remover ~/.pam_environment e manter ~/.profile?
Uma maneira adequada seria ter a capacidade de definir variáveis de ambiente por usuário em /etc/security/pam_env.conf. Ainda não solicitado upstream. Ou qualquer opção editável apenas com direitos de administrador.