Ausführen von Mono auf der CentOS 5-CLI

Ausführen von Mono auf der CentOS 5-CLI

Ich habe einen VPS-Server (Virtual Private Server), der auf Linux CentOS 5 32 Bit läuft. Ich habe vncserverdie 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:

  1. Starten Sie die Mono-App in einer Shell, die keinen Zugriff auf den X-Desktop hat
  2. 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:

  1. 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.
  2. 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 $DISPLAYIhrem Remote-Linux zuweisen.

  1. Wenn Sie dieRDP(Remote Desktop Protocol) können Sie ein Paket vonxrdp.

    $ sudo apt-get install xrdp
    
  2. Verbindung zum Remote-Server (Remmina, ).

  3. Öffnen Sie das Terminal und holen Sie sich $DISPLAY.

    $echo $DISPLAY
    :10.0
    
  4. Monoprogramm mit SSH ausführen:

    $ ssh [email protected]
    $ export DISPLAY=:10.0
    $ mono server.exe > /dev/null 2> /dev/null &
    

verwandte Informationen