在 CentOS 5 CLI 上运行 Mono

在 CentOS 5 CLI 上运行 Mono

我有在 Linux CentOS 5 32 位上运行的 vps 服务器(虚拟专用服务器),我安装了vncserverX-Windows、GNOME 和 KDE 环境,并从 Windows 7 桌面中的 vncviewer 连接到 VNC 服务器

现在我执行命令

mono Radegast.exe

在终端,我得到了

[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 -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 

答案1

您没有在问题中明确说明这一点,但您遇到的错误:

[错误]: - 未处理的 System.TypeInitializationException:System.Windows.Forms.XplatUI 的类型初始值设定项引发异常 ---> System.ArgumentNullException:无法打开显示(需要 X-Server。检查 DISPLAY 环境变量)参数名称:显示

听起来您正在尝试执行以下两件事之一:

  1. 在无法访问 X 桌面的 shell 中启动 mono 应用程序
  2. 正在以无权访问显示器的用户身份运行

这条线索在瑞德嘉斯特论坛听起来像你同样的问题。

潜在的解决方案

您需要:

  1. 以拥有 X 桌面的同一用户身份 ssh 进入 vps 后,将 $DISPLAY 环境变量设置为“:0.0”
  2. xhost +在以其他用户身份运行 mono 命令之前,以拥有桌面的用户身份运行(不要忘记也为该其他用户设置 $DISPLAY 变量!)

我相信你也可以像这样运行你的 mono 命令:

% XAUTHORITY=/home/$YOURUSER/.Xauthority DISPLAY=:0.0 mono Radegast.exe

笔记:$YOURUSER 是拥有 X 桌面的用户。

答案2

如果你的C#代码有GUI,你需要给它分配一个$DISPLAY。您可以先echo $DISPLAY在远程 linux 上输入 $DISPLAY 。

  1. 如果您想使用远程开发计划(远程桌面协议),您可以安装包XRDP

    $ sudo apt-get install xrdp
    
  2. 连接到远程服务器(Remmina,)。

  3. 打开终端并获取 $DISPLAY。

    $echo $DISPLAY
    :10.0
    
  4. 使用 ssh 运行单声道程序:

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

相关内容