Se você está tentando fazer com que qualquer aplicativo chrooted apareça no X11, você precisará de algumas coisas configuradas corretamente. Uma é uma variável de ambiente DISPLAY
válida, a segunda é um arquivo Xauthority apropriado e o terceiro e mais importante acesso ao soquete usado pelo X11 / Xorg. O X11 pode usar um soquete de rede TCP ou um soquete do Domínio Unix. Um soquete TCP será mais fácil de usar a partir de um chroot, mas a maioria dos desktops modernos tem o TCP desativado com -nolisten tcp
ou algo semelhante definido no servidor X. Os soquetes TCP iniciam na porta TCP 6000 para exibição: de 0 a 6063 para a última exibição. Enquanto os soquetes TCP estiverem ouvindo, você não precisará fazer mais nada com soquetes. Você ainda precisa se preocupar com DISPLAY e Xauthority. Sockets de domínio Unix requerem um pouco mais de trabalho e, pelo menos no Linux, residem em /tmp/.X11-unix/X?
where? é um número de 0 a 63. Se o seu chroot residia no mesmo sistema de arquivos como /tmp
, então você pode usar hard links, pelo menos no Linux. Links simbólicos não deixam um chroot. Substituir? com o número de exibição correto:
mkdir /path/to/chroot/tmp
chmod 1777 /path/to/chroot/tmp
mkdir /path/to/chroot/tmp/.X11-unix
chmod 1777 /path/to/chroot/tmp/.X11-unix
ln -f /tmp/.X11-unix/X? /path/to/chroot/tmp/.X11-unix/X?
mkdir
e chmod
só precisam ser feitos uma vez, mas o arquivo de soquete precisará ser recriado com ln
em cada sessão X. Se /tmp
não estiver no mesmo sistema de arquivos, a vida é mais difícil e você precisará de algum tipo de hackery, como tornar /tmp/.X11-unix
um link simbólico para o diretório correspondente sob o chroot. Em seguida, verifique se a variável de ambiente DISPLAY
está configurada e corresponde ao que é usado pelo terminal e por outros aplicativos X11. Por fim, para copiar o .Xauthority
, use xauth
. Você precisa encontrar o cookie correspondente para sua sessão X11 e esse cookie será diferente para cada sessão. Use xauth list $DISPLAY
para imprimir cookies para seu DISPLAY
. O nome será parecido com host:?
ou host/unix:?
, em que host é o nome do host do computador e? é o número de exibição. O número de exibição pode ser recuperado com echo $DISPLAY
e será o número após os dois pontos (:) e antes de qualquer ponto (.) Para copiar sobre o Xauthority, use algo assim:
xauth extract /path/to/chroot/.Xauthority host/unix:1
xauth -f /path/to/chroot/.Xauthority list
O segundo comando lista simples as entradas copiadas. Se você precisar copiar usando sudo ou outro comando para alterar usuários, tente algo assim:
xauth extract - host/unix:1 | sudo xauth -f /path/to/chroot/.Xauthority merge -
Se o local em que você colocar o arquivo .Xauthority
não for o diretório inicial do usuário do chrooted, será necessário definir a variável de ambiente XAUTHORITY
:
export XAUTHORITY=/path/to/chroot/.Xauthority
Como você provavelmente pode dizer, não é típico executar um aplicativo GUI em um chroot.