Xorg перестает работать после выхода из всех приложений X - PullRequest
1 голос
/ 01 декабря 2011

У меня есть простое приложение, которое я использую, чтобы определить, когда мой X-сервер готов. Приложение используется в процессе инициализации, и все X-приложения зависят от его завершения. Он продолжает пытаться подключиться, а когда он получает соединение, он просто завершается.

int main(int argc, const char *argv[])
{
    Display *dis;

    while(1){
        dis = XOpenDisplay(NULL);

        if(dis != 0)
            break;
        usleep(1000);
    }

    if(dis != 0)
       XCloseDisplay(dis);

    return 0;
}

Моя проблема в том, что после того, как я обновил свой драйвер Nvidia, ни одно из приложений X не смогло ничего отобразить на экране, если они запускались после этого простого теста.

Кроме того, если я запускаю xeyes в качестве первого приложения, то оно работает. Затем, если я нажму Ctrl-c (чтобы закрыть запущенное приложение xeyes), и запусту новое, на экране ничего не отобразится, но на экране не появится никаких ошибок.

Это ожидаемое поведение? Должен ли Xorg перестать работать после выхода из последнего X-приложения?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

X имеет концепцию «поколений серверов»: всякий раз, когда последние клиенты отключаются от X-сервера, сервер пытается перезагрузить себя, а затем мы говорим, что он начал новое «поколение».Большинство пользователей никогда не выходят за пределы первого поколения, поэтому несколько поколений не очень часто тестируются, поэтому неудивительно, что вы вызываете ошибку при использовании нескольких поколений.При запуске новых поколений часто возникают утечки памяти.Если вы обнаружите ошибку, сработавшую, когда X-сервер получит серверы нового поколения, сообщите об этом на bugs.freedesktop.org.

Из описания вашей среды вы, похоже, запускаете новые поколения серверов.Вы можете запустить X с «-noreset», чтобы избежать сброса сервера, возможно, скрывая любые существующие ошибки (это хороший тест!).

В качестве примечания, вы можете рассмотреть замену программы, которую вы вставилисхема с использованием SIGUSR1.Следующий текст взят из "man Xserver":

  SIGUSR1 This  signal  is  used  quite  differently from either of the above.
          When the server starts, it checks to see if it has inherited
          SIGUSR1 as SIG_IGN instead of the usual SIG_DFL.  In this case, the server
          sends a SIGUSR1 to its parent process after it has  set
          up the various connection schemes.  Xdm uses this feature to recognize
          when connecting to the server is possible.
0 голосов
/ 01 декабря 2011

Это явно не ожидаемое поведение.

Но тот факт, что вы используете эту программу 'опроса', показывает мне, что вы пытаетесь обойти другие ошибки.

Были известные проблемы с быстродействующими машинами, Ubuntu + Nvidia + plymouth;Посмотрите, сможете ли вы обновить свою систему или отключить Плимут?

Кроме того, вы можете проверить, на чем работает vty X, когда он «перестает работать»?

ps -ef | grep X
gdmtty="$(ps --no-heading -o tty -p $(pgrep X))"
stty -F "/dev/$gdmtty"
ps -f -t "$gdmtty"

(иногда флаги терминала в отношении СИГНАЛОВ могут быть неподходящими для XServer, и ваш Ctrl-C может вызвать проблему).

...