2011-12-01 1 views
1

J'ai une application simple que j'utilise pour déterminer quand mon serveur X est prêt. L'application est utilisée dans le processus init, et toutes les applications X en dépendent pour être complétées. Il continue à essayer de se connecter, et quand il obtient une connexion, il se ferme simplement.Xorg cesse de fonctionner après la fermeture de toutes les applications 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; 
} 

Mon problème est que quand je mis à jour mon pilote Nvidia, aucune des applications X a pu afficher quoi que ce soit à l'écran, s'ils ont couru après ce test simple.

De plus, si je lance xeyes comme première application, alors cela fonctionne. Ensuite, si j'appuie sur Ctrl-c (pour terminer l'application xeyes en cours), et que j'en lance un nouveau, rien ne s'affiche à l'écran, mais aucune erreur n'apparaît à l'écran.

Est-ce le comportement attendu? Xorg est-il censé cesser de fonctionner après la sortie de la dernière application X?

+0

Avez-vous vérifié le fichier journal? –

Répondre

0

Ce comportement n'est évidemment pas attendu. Mais le fait que vous utilisiez ce programme 'polling' m'indique que vous essayez de contourner d'autres bogues.

Il y a eu known issues avec des machines à démarrage rapide, Ubuntu + Nvidia + plymouth; Voyez si vous pouvez mettre à jour votre système ou désactiver Plymouth?

De plus, pouvez-vous vérifier ce que vty X fonctionne quand il «arrête de fonctionner»?

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

(parfois les drapeaux terminaux en ce qui concerne SIGNALS seraient inapropriée pour XServer et votre Ctrl-C peut provoquer le problème à l'époque).

+0

Je ne suis pas sûr que ce soit le cas ici. Je n'utilise aucune distribution officielle et le processus init est développé en interne. Il n'y a pas de plymouth installé sur la cible. – Allan

2

X a le concept de "générations de serveurs": chaque fois que le dernier client se déconnecte du serveur X, le serveur essaie de se réinitialiser et nous disons qu'il a commencé une nouvelle "génération". La plupart des utilisateurs ne dépassent jamais la première génération, donc plusieurs générations ne sont pas testées beaucoup, donc ce n'est pas une grande surprise si vous déclenchez un bug en utilisant plusieurs générations. Il y a souvent des fuites de mémoire lorsque de nouvelles générations sont déclenchées. Si vous trouvez un bug déclenché lorsque le serveur X arrive à de nouvelles générations de serveurs, veuillez le signaler à bugs.freedesktop.org. À partir de la description de votre environnement, il semble que vous déclenchiez de nouvelles générations de serveurs. Vous pouvez démarrer X avec "-noreset" pour éviter la réinitialisation du serveur, en masquant éventuellement les bogues existants (c'est un bon test!). En guise de remarque, vous pourriez envisager de remplacer le programme que vous avez collé pour un schéma en utilisant SIGUSR1. Le texte suivant est de "l'homme 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. 
Questions connexes