Eu consegui executar o Xvfb sem raiz.
No final, eu baixei o código-fonte do link , injetou variáveis de ambiente, dependências instaladas (yum ), e compilou Xvfb
e transferiu as bibliotecas binárias e compartilhadas para o meu sandbox.
Criticamente, em [sources]/xkb/xkbInit.c
, adicionei essas linhas ao redor da linha 815:
if (++i >= argc)
UseMsg();
else
XkbDfltRepeatInterval = (long) atoi(argv[i]);
return 2;
}
/* End original code */
// Change xkbcomp bin directory with an environment variable
char *xkbBinDir = getenv("XKB_BINDIR");
if (xkbBinDir) {
XkbBinDirectory = Xstrdup(xkbBinDir);
}
// Change base xkb directory with an environment variable
char *xkbBaseDir = getenv("XKBDIR");
if (xkbBaseDir) {
XkbBaseDirectory = Xstrdup(xkbBaseDir);
}
/* Original code */
return 0;
}
Eu posso definir as variáveis de ambiente XKB_BINDIR
para o caminho binário xkbcomp
(copiado para a caixa de proteção) e XKBDIR
para onde meu arquivo default.xkm
é.
Novamente, minha estratégia bem-sucedida foi compilar Xvfb
da fonte com modificações. Para detalhes excruciantes e instruções passo-a-passo, eu escrevi isso no meu site aqui - link
@dirkt tinha uma abordagem interessante que era hackear o binário Xvfb e fazer manipulação de string. Isso é atraente, pois é rápido e um pouco desobediente, mas tinha desvantagens: 1) Eu não posso saber qual é o número do servidor com antecedência [1 .. 99], e 2) Meus caminhos são muito longos e exigiriam links simbólicos. Eu realmente tentei um comando NOP (:) como a substituição da string junto com a cópia manual do server-N.xkm
, exceto que existem dois caminhos lógicos para lidar com o código-fonte, sendo um deles quando o xkm arquivo é armazenado em cache.