сама ошибка от Xvfb
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.
(EE)
Fatal server error:
(EE) Failed to activate virtual core keyboard: 2(EE)
через консоль просто командой запускается нормально без ошибок
/usr/bin/Xvfb :99 -nolisten tcp -screen 0 1024x768x24
через код с ошибкой, вот код
/* g++ -Wall -otest test.cpp -std=c++14 */
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <syslog.h>
#include <sys/wait.h>
#include <chrono>
#include <thread>
#include <atomic>
#include <cstdlib>
#include <iostream>
std::atomic<bool> running;
void signal_handler(int sig)
{
syslog(LOG_DEBUG, "signal receive: %d", sig);
if(sig == SIGTERM || sig == SIGINT)
running = false;
}
int main(int argc, char** argv)
{
openlog("test_case", LOG_PERROR, LOG_USER);
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGCHLD, SIG_IGN);
signal(SIGHUP, SIG_IGN);
int pid = fork();
if(0 > pid)
{
syslog(LOG_ERR, "fork failed");
return -1;
}
if(0 == pid)
{
syslog(LOG_DEBUG, "child zone");
signal(SIGTERM, SIG_DFL);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
int res = execl("/usr/bin/Xvfb", "Xvfb", ":99", "-nolisten", "tcp", "-screen", "0", "1024x768x24", (char*) NULL);
if(res < 0)
syslog(LOG_ERR, "execl failed: %s", strerror(errno));
_exit(0);
}
syslog(LOG_DEBUG, "main running");
running = true;
using namespace std::chrono_literals;
while(running)
std::this_thread::sleep_for(100ms);
closelog();
return 0;
}
selinux выключен, любые идеи... и кто и что там еще может какие лимиты срабатывать?