XQuartz: user / environment ao executar o xinit? (XMonad, xmodmap, etc.)

2

Estou executando o XMonad com o XQuartz em um MacBook Prop Retina de 11,3. Minhas .xinitrc parece como segue:

[[ -f ~/.Xdefaults ]] && xrdb -load ~/.Xdefaults
export LANG="en_CA.UTF-8"
xmodmap /Users/xxxxxxx/.xmodmarc
cd $HOME
/Users/xxxxxxxx/Library/Haskell/bin/xmonad

Eu notei que tanto o LANG exportação e o xmodmap estão sendo chamados, mas seus efeitos não estão persistindo. Se eu jogar alguns env >> tmp.txt lá eu vejo que é um ambiente diferente do que quando finalmente chego a um terminal, e suspeito que talvez até um usuário diferente esteja chamando xinit.

Minhas perguntas

  • qual usuário ou ambiente está realmente chamando xinit quando você inicia o XQuartz?
  • onde é o local apropriado para colocar xmodmap de modo que é chamado uma vez, e apenas uma vez, quando o XQuartz é iniciado?
  • Como obtenho o LANG definir uma vez, e apenas uma vez, como uma variável de ambiente quando eu inicio o XQuartz (eu preciso disso para suporte unicode)

Obrigado!

aaronlevin
fonte
Você tem cd $HOME na tua ~/.xinitrc? Se sim, remova essa linha. Além disso, coloque exec na frente de sua chamada para xmonad, como isso: exec .../bin/xmonad. Além disso, observe que export altera apenas o ambiente do processo atual e processos filhos do processo atual. Não tem efeito em processos já em execução, como outra instância do terminal.
Alexej Magura

Respostas:

2

O que o usuário / env está realmente chamando xinit quando você inicia o XQuartz?

No Linux, esse seria o usuário com o qual você efetuou login; Eu suspeito que é provavelmente o mesmo para o Mac OS X. Quanto ao ambiente, seja qual for o ambiente atual é quando você executa xinit, esse será o ambiente que XQuartz executa com, com exceção das alterações feitas no ambiente em um dos arquivos que XQuartz lê quando inicia.

Onde devo colocar xmodmap de modo que é chamado uma vez, e apenas uma vez, quando o XQuartz é iniciado?

Para criar seu próprio mapa / tabela customizado e armazená-lo em um arquivo de configuração, execute:

xmodmap -pke > ~/.Xmodmap

Faça as alterações desejadas para ~/.Xmodmap e, em seguida, teste a nova configuração com:

xmodmap ~/.Xmodmap

Para ativar sua tabela personalizada ao iniciar o Xorg, isto é, XQuartz, adicione o seguinte ao seu ~/.xinitrc

[ -s ~/.Xmodmap ] && xmodmap ~/.Xmodmap # you can also try using `[[ -s ~/.Xmodmap ]] && xmodmap ~/.Xmodmap`

Como faço para obter o LANG definido uma vez, e apenas uma vez, como uma variável de ambiente quando eu inicio o XQuartz (eu preciso disso para suporte unicode)

Pôr LANG, basta adicionar um dos seguintes ao seu ~/.xinitrc

[[ -z "$LANG" ]] && LANG=<VALUE> # only sets LANG, if LANG is empty
LANG=<VALUE> # sets LANG regardless of whether it is or is not empty
Alexej Magura
fonte
Infelizmente isso não funcionou. Eu tive um .xinitrc já com código semelhante. Eu acredito que o problema está relacionado de alguma forma com o ambiente em que xinit está sendo chamado. Se eu correr whoami em .xinitrc Eu recebo o usuário correto. No entanto, se eu olhar $ENV dentro .xinitrc (Correndo echo "$ENV" >> /Users/.../tmp.txt ) Eu vejo um ambiente diferente do que quando eu finalmente aterrizei na casca.
aaronlevin
@weirdcanada você verificou os documentos para o XQuartz para ver se ele cobre esse tipo de problema?
Alexej Magura