linux 怎样安装x服务,SSH下Linux X Server的配置

2023-05-16

本文主要介绍如何在Linux下配置图形服务以便ssh远程使用GUI环境。

X的概念

Linux的桌面环境是通过X Server(XFree86、Xorg),X Client(libX11),Window Manager(KDE、xfce、wm2)等服务提供的。我们先简单了解X涉及的一些概念,下面的X架构图来自wikipedia,请注意X server是运行在有屏幕的机器这边,也就是你自己的PC上,而远程执行的应用,例如jvisualvm则是X的client端。换句话说就是SSH的client端是X的server端,SSH的server端是X的client端。

e6b45bb9c2e9

https://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture

Windows下常用的X Server是Xming和MobaXterm。它们都带有简单的窗口管理服务,例如下图就是MobaXterm WM配置,以及启用fvwm的窗口界面:

e6b45bb9c2e9

MobaXterm配置X server

e6b45bb9c2e9

在fvwm中显示的jvisualvm和jconsole

X server启动后默认会监听本地6000端口,X client通过环境变量DISPLAY获取X server服务地址,例如DISPLAY=localhost:0.0代表X server在本机6000端口,DISPLAY=localhost:1.0代表X server在本机6001端口依此类推。建立连接之前,X server还需要验证X client的身份,最常的是基于Cookie机制,也就是client读取~/.Xauthority中的信息用于授权。

由于X server是监听在本地的,ssh服务端的远程client想连回本地必须使用remote tunnel,X11 forwarding则可以方便的将X11协议转发到远程主机。转发过程中会自动设置DISPLAY环境变量和Xauth授权信息。

设置步骤和检查点

SSH服务端设置

检查/etc/ssh/sshd_config文件,确保以下参数正确:

X11Forwarding yes #启用X11 Forwarding

#X11DisplayOffset 10 #默认从10.0开始设置DISPLAY环境变量

然后重启sshd,重启并不会导致已连上的ssh client断开。

service sshd restart

SSH客户端设置

PuTTY+Xming,确保Xming已开启,putty中已启用X11 forwarding。

e6b45bb9c2e9

putty启用X11 forwarding

MobaXterm默认已启动X server和X11 forwarding,无需特别配置。

服务器的X配置

有些服务器可能没安装xauth导致无法编辑.Xauthority文件,请用下面的命令安装

sudo yum install xorg-x11-xauth

服务器的XLib版本则可以通过rpm -q libX11命令确认。

SSH调试

在MobaXterm命令行窗口执行ssh -vvv root@host可以看到详细的debug信息,v的个数越多内容越详细。

sudo或su之后无法连接X server

缺少DISPLAY环境变量:直接export之前账户的DISPLAY信息。

Authorisation not recognised异常:导入前一用户的xauth信息,比如导入test用户的到当前用户下:

xauth add $(xauth -f ~test/.Xauthority list|tail -1)

.Xauthority的一些异常可以试试下面这组命令

# Rename the existing .Xauthority file by running the following command

mv .Xauthority old.Xauthority

# xauth with complain unless ~/.Xauthority exists

touch ~/.Xauthority

# only this one key is needed for X11 over SSH

xauth generate :0 . trusted

# generate our own key, xauth requires 128 bit hex encoding

xauth add ${HOST}:0 . $(xxd -l 16 -p /dev/urandom)

SSH跳转后的设置

上面概念部分已经说过X11 forwarding本质上就是通过ssh remote tunnel将本地X server转发到远程,所以即使远程主机的X11 forwarding是关闭的,我们也可以通过ssh -R转发服务。

ssh -R6000:127.0.0.1:6000 root@host #可以多次跳转

export DISPLAY=localhost:0.0

#根据需要执行xauth add

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 怎样安装x服务,SSH下Linux X Server的配置 的相关文章

  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at

随机推荐