RHEL6 && OEL6 Wie wird $DISPLAY beim Start bestimmt?

RHEL6 && OEL6 Wie wird $DISPLAY beim Start bestimmt?

Ich habe inkonsistente $DISPLAY-Variablen auf meinen OEL6-Servern, die eine ganze Menge Probleme verursacht haben.Probleme mit Socket-Dateien.

Ich habe überraschend wenig darüber herausgefunden, was die Umgebungsvariable $DISPLAY eigentlich setzt. Ich weiß (mehr oder weniger), was sie tut und wie man sie manuell in der Shell setzt. Was ich nicht weiß, ist, WIE sie beim Systemstart gesetzt wird.

Also

Wie und wo wird die GDM-Umgebungsvariable $DISPLAY festgelegt und wie kann ich GDM auf :0.0 zwingen?

Hinweis: Ich suche NICHT, export DISPLAY=:0.0da dies in diesem Fall nichts nützen würde.

Antwort1

Beim MenschenX(7)Es gibt einen AbschnittAnzeigenamenwelche Staaten:

Auf POSIX-Systemen wird der Standardanzeigename in Ihrer Umgebungsvariable DISPLAY gespeichert. Diese Variable wird automatisch vom xterm-Terminalemulator festgelegt.

und als nächstes:

Schließlich akzeptieren die meisten X-Programme die Befehlszeilenoption -display displayname, um den Inhalt von DISPLAY vorübergehend zu überschreiben. Dies wird am häufigsten verwendet, um Fenster auf dem Bildschirm einer anderen Person anzuzeigen oder als Teil eines „Remote Shell“-Befehls, um ein Xterm zu starten, das auf Ihr Display zurückverweist.

Mann fürXserver(1)Wir haben Informationen zu Optionen:

:Anzeigenummer Der X-Server läuft unter der angegebenen Displaynummer, die standardmäßig 0 ist. Wenn mehrere X-Server gleichzeitig auf einem Host laufen sollen, muss jeder eine eindeutige Displaynummer haben. Lesen Sie den Abschnitt DISPLAY NAMES der Manualpage X(7), um zu erfahren, wie Sie angeben, welche Displaynummer die Clients verwenden sollen.

Sehen Sie sich Folgendes an: /etc/gdm/Init/Default (verfügbar unter ArchLinux, daher bin ich nicht sicher, ob es im RHEL-System verfügbar ist).

Noch ein paar weitere Erkenntnisse. DISPLAY wird vom xinit-Programm festgelegt. xinit.c hat Folgendes:

if (argc > 0 && (argv[0][0] == ':' && isdigit(argv[0][1])))
    displayNum = *argv;
else
    displayNum = *sptr++ = default_display;

(...)

static void
set_environment(void)
{
    if (setenv("DISPLAY", displayNum, TRUE) == -1)
        Fatal("unable to set DISPLAY");
}

Daher kann xinit den Standardwert festlegen oder ihn aus der Option übernehmen, die bei der Ausführung an xinit übergeben wurde.xinit(1):

       xinit [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]

Und noch eine: Die Umgebungsvariable kann über PAM festgelegt werden. Z. B./etc/security/pam_env.conf

# Set the DISPLAY variable if it seems reasonable
#DISPLAY                DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}

verwandte Informationen