
Ich habe einen VPS-Server (Virtual Private Server), der auf Linux CentOS 5 32 Bit läuft. Ich habe vncserver
die X-Windows-, GNOME- und KDE-Umgebung installiert und verbinde mich über vncviewer auf meinem Windows 7-Desktop mit dem VNC-Server.
jetzt führe ich den Befehl aus
mono Radegast.exe
im Terminal und ich bekam
[ERROR]: - Unhandled System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.ArgumentNullException: Could not open display (X-Server required. Check you DISPLAY environment variable)
Parameter name: Display
at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) [0x00000]
at System.Windows.Forms.XplatUIX11..ctor () [0x00000]
at System.Windows.Forms.XplatUIX11.GetInstance () [0x00000]
at System.Windows.Forms.XplatUI..cctor () [0x00000]
--- End of inner exception stack trace ---
at System.Windows.Forms.Application.EnableVisualStyles () [0x00000]
at Radegast.MainProgram.RunRadegast (System.String[] args) [0x00000]
at Radegast.MainProgram.Main (System.String[] args) [0x00000] : An exception was thrown by the type initializer for System.Windows.Forms.XplatUI
at System.Windows.Forms.Application.EnableVisualStyles () [0x00000]
at Radegast.MainProgram.RunRadegast (System.String[] args) [0x00000]
at Radegast.MainProgram.Main (System.String[] args) [0x00000]
Mono-Version ist
# mono -V
Mono JIT compiler version 2.4.2.3 (tarball Sat Apr 20 19:49:33 MSD 2013)
Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com
TLS: __thread
GC: Included Boehm (with typed GC)
SIGSEGV: altstack
Notifications: epoll
Architecture: x86
Disabled: none
Antwort1
Sie geben dies in Ihrer Frage nicht explizit an, aber der Fehler, auf den Sie stoßen:
[FEHLER]: - Nicht behandelte System.TypeInitializationException: Eine Ausnahme wurde vom Typinitialisierer für System.Windows.Forms.XplatUI ausgelöst ---> System.ArgumentNullException: Anzeige konnte nicht geöffnet werden (X-Server erforderlich. Überprüfen Sie Ihre DISPLAY-Umgebungsvariable) Parametername: Anzeige
Es klingt, als ob Sie versuchen würden, eines von zwei Dingen zu tun:
- Starten Sie die Mono-App in einer Shell, die keinen Zugriff auf den X-Desktop hat
- wird als Benutzer ausgeführt, der keine Berechtigung zum Zugriff auf das Display hat
Dieser Thread auf derRadegast Forumklingt nach dem gleichen Problem wie Sie.
Potentielle Lösungen
Sie müssen entweder:
- Setzen Sie die Umgebungsvariable $DISPLAY auf ":0.0", nachdem Sie sich per SSH mit dem VPS als derselbe Benutzer angemeldet haben, dem auch der X-Desktop gehört.
- Führen Sie es
xhost +
als der Benutzer aus, dem der Desktop gehört, bevor Sie Ihren Mono-Befehl als ein anderer Benutzer ausführen (vergessen Sie nicht, auch die Variable $DISPLAY für diesen anderen Benutzer festzulegen!)
Ich glaube, Sie könnten Ihren Mono-Befehl auch folgendermaßen ausführen:
% XAUTHORITY=/home/$YOURUSER/.Xauthority DISPLAY=:0.0 mono Radegast.exe
NOTIZ:$YOURUSER ist der Benutzer, dem der X-Desktop gehört.
Antwort2
Wenn Ihr C#-Code eine GUI hat, müssen Sie dieser ein $DISPLAY zuweisen. Sie können $DISPLAY zuerst echo $DISPLAY
Ihrem Remote-Linux zuweisen.
Wenn Sie dieRDP(Remote Desktop Protocol) können Sie ein Paket vonxrdp.
$ sudo apt-get install xrdp
Verbindung zum Remote-Server (Remmina, ).
Öffnen Sie das Terminal und holen Sie sich $DISPLAY.
$echo $DISPLAY :10.0
Monoprogramm mit SSH ausführen:
$ ssh [email protected] $ export DISPLAY=:10.0 $ mono server.exe > /dev/null 2> /dev/null &