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的配置 的相关文章

  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 如何使用 Net::SSH::Perl 和公钥?

    我正在尝试使用Net SSH Perl使用公钥与此代码进行连接 my ssh Net SSH Perl gt new host debug gt 1 die 我将密钥放在 root ssh id rsa 和 root ssh identit
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐