通过SSH -q -X来远程打开连接显示图形界面

本文详细介绍了如何在Ubuntu和Windows系统上配置SSH X11转发,包括服务器端和客户端的设置步骤,以及解决Xming中文字体显示不正常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下以qtcreator 为例
以Ubuntu 16.04.4 LTS为例。安装配置主要分为服务器端和客户端两个方面。

一、服务器端配置

  1. 安装ssh服务
    sudo apt-get install openssh-server
#(apt-get是ubuntu系统的命令。CentOS系统使用yum -y install openssh-server,下面雷同)

2.修改配置文件,实现支持X转发
 a.编辑sshd_conf文件(自选编辑方式)

  sudo gedit /etc/ssh/sshd_config
AllowAgentForwarding yes
AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

 b.找到X11Forwarding这一行,将其后面no(或者yes)改为yes,并确保前面没有#好注释,保存退出。
3.重启ssh服务

    sudo /etc/init.d/ssh restart

至此,ssh服务器端配置完毕。至于ssh配置文件中其他参数,以及ssh其他命令配置,请参考ssh手册(man ssh)

二、客户端配置

(一)Linux客户端

 1.安装ssh客户端

    sudo apt-get install openssh-client

 2.修改配置文件,实现X接收
  a.编辑ssh_conf文件

  sudo gedit /etc/ssh/ssh_config

  b.找到ForwardAgent yes,ForwardX11 yes,ForwardX11Trusted yes 这三行,并确保三个后面全部是yes,前面没有#号注释。
 3.保存退出

这样就可以使用 ssh -q -X username@host 登录服务器,使用命令qtcreator,就会发现本地弹出一个图形界面的qtcreator,恭喜ssh配置成功。
在这里插入图片描述

(二)Windows客户端

Window下,使用Putty+Xming的方式实现X界面的接收。
 1.安装Putty和Xming
 2.配置Xming
第一次运行Xming,使用开始菜单里面的XLaunch来启动,产生一个初始的配置文件。对于简单的使用来说,不需要任何特殊的配置,一切使用默认即可。Xming的具体配置和使用可以参考Xming的Manual。需要记住的是下图中标示出的“Display number”中的数字,此处使用默认的0。
Linux服务器ssh配置,支持X转发

启动完成后,在托盘区会出现一个“X”形状的图标,这表示Xming已经在运行了,将鼠标悬停上去,能看到当前使用的“Display number”。
 3.配置Putty
运行PuTTY,在配置界面,选择“Connection-SSh-X11”,选中“Enable X11forwarding”,“X display location”中填上上一步中“Display number”中的数字(此处就是“localhost:0”)。
Linux服务器ssh配置,支持X转发

然后连接登录远程主机,看上去一切正常的样子。运行xclock,同样会弹出一个图形界面的时钟。

 三、Xming中文字体显示不正常解决
安装Xming的中文字体,从Xming的SourceForge页面下载xming-fonts-setup.exe,安装到Xming的安装路径下即可。
注:如果出现Xauthority问题,请删除/home/下的所有.Xautority文件,重新ssh登录一下即可。
我就遇到了一个xautority的问题:file /root/.Xauthority does not exist,我自己找了一个解决方案,使用了ldd /usr/bin/Xorg这个命令就解决了。

<think>好的,用户的问题是关于如何使用C++在Windows上开发一个应用程序,通过SSH-X连接到Linux实现远程桌面。我需要先理解用户的具体需求。SSH-X通常指的是在SSH连接中启用X11转发,这样可以在本地显示远程Linux机器上的图形界面应用。用户可能希望他们的Windows应用程序能够建立SSH连接,并转发X11会话,从而显示远程的桌面环境。 首先,我需要确认用户是否了解SSH X11转发的基本原理。X11转发允许将远程的X Window应用程序显示到本地X服务器上。但Windows本身没有原生的X服务器,所以用户可能需要在Windows上安装一个,比如VcXsrv或Xming。这一步可能需要在回答中提到,作为前提条件。 接下来,用户需要使用C++编写Windows应用程序,这个应用需要建立SSH连接,并处理X11转发。实现SSH连接通常可以使用库如libssh或libssh2,这些库提供了SSH协议的客户端实现。我需要考虑如何集成这些库到C++项目中,以及如何处理认证(如密码、密钥)。 然后,X11转发部分需要了解如何通过SSH通道转发X11会话。这涉及到在SSH连接中请求X11转发,并设置相关的环境变量,比如DISPLAY。远程Linux机器上的X应用会尝试连接到本地X服务器,因此需要确保X服务器正在运行,并且防火墙设置允许连接。 另外,远程桌面可能不仅仅是单个应用程序,而是整个桌面环境。这时候可能需要使用虚拟X会话管理器,如Xvfb(虚拟帧缓冲区),然后在其中启动一个桌面环境,并通过X11转发到本地。或者使用专门的远程桌面协议,如VNC或RDP,但用户明确提到了SSH-X,所以应该专注于X11转发。 用户可能需要示例代码或教程,但现有的资源可能不完整或需要整合。需要引导用户参考libssh的官方文档,或者寻找使用libssh实现X11转发的例子。同时,可能需要处理多线程,因为SSH通信和X11事件处理可能需要异步进行。 还要考虑Windows下的开发环境配置,比如如何链接libssh库,可能需要使用CMake或Visual Studio的项目配置。此外,网络编程方面的知识,如socket处理,也可能涉及。 用户提供的引用中有关于文件符号链接和网络配置的内容,但似乎与当前问题关联不大,可能不需要特别考虑这些引用。但需要确保回答符合之前提到的格式要求,如行内公式使用$...$,引用标识等,不过当前问题不涉及数学公式,所以可能不需要处理这部分。 最后,生成的相关问题需要围绕C++ SSH开发、X11转发配置、Windows X服务器选择等,帮助用户进一步深入。</think>要开发一个通过SSH-X实现Linux远程桌面的C++ Windows应用程序,需要结合SSH协议栈、X11转发和图形界面处理技术。以下是具体实现路径: 1. **环境准备** - 安装Windows版X服务器(如VcXsrv/Xming),用于渲染远程图形界面 - 配置SSH服务端开启X11转发:修改`/etc/ssh/sshd_config`添加: ``` X11Forwarding yes X11DisplayOffset 10 ``` 2. **核心组件实现** ```cpp // 使用libssh建立SSH连接 #include <libssh/libssh.h> ssh_session connect_ssh(const char* host, int port) { ssh_session session = ssh_new(); ssh_options_set(session, SSH_OPTIONS_HOST, host); ssh_options_set(session, SSH_OPTIONS_PORT, &port); if(ssh_connect(session) != SSH_OK) throw std::runtime_error("连接失败"); if(ssh_userauth_password(session, nullptr, "password") != SSH_AUTH_SUCCESS) throw std::runtime_error("认证失败"); ssh_channel channel = ssh_channel_new(session); if(ssh_channel_open_session(channel) != SSH_OK) throw std::runtime_error("通道建立失败"); return session; } ``` 3. **X11转发实现** - 建立SSH隧道时需设置转发参数: ```cpp int rc = ssh_channel_request_x11(channel, 0, "localhost:0.0", nullptr); if(rc != SSH_OK) {/* 错误处理 */} ``` - 获取X11显示地址: ```cpp const char* xdisplay = ssh_channel_get_x11_display(channel); setenv("DISPLAY", xdisplay, 1); // 设置环境变量 ``` 4. **远程桌面启动** ```cpp // 通过SSH通道执行远程命令 ssh_channel_request_exec(channel, "xterm -display $DISPLAY"); // 测试X转发 ssh_channel_request_exec(channel, "startxfce4"); // 启动完整桌面环境 ``` 5. **图形界面集成** - 使用Windows API创建显示窗口: ```cpp HWND hwnd = CreateWindowEx(0, "STATIC", "X11 Display", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768, NULL, NULL, hInstance, NULL); ``` - 将X服务器输出映射到窗口区域(需配合Xlib库) 开发注意事项: - 建议使用CMake管理项目依赖: ```cmake find_package(LibSSH REQUIRED) target_link_libraries(MyApp PRIVATE LibSSH::libssh) ``` - 需要处理SSH连接的异步I/O操作,推荐使用多线程模型 - 安全增强建议采用密钥认证代替密码认证[^3]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值