通过X11远程显示和Verysync实现两台*NIX设备间的轻松协作

前言

由于个人日用FreeBSD,但.NET Core和OpenWrt等的开发则必须在Linux上进行。因此在内网设置一个不带显示器的Linux设备,并将配置过程以此记录。

配置 X11 远程显示

        因为 X11 基于Socket,因此在本机显示远程的X程序是可能的。

        (以下配置仅Xorg可用)

        测试X11 TCP监听的工作状况

                只要执行以下内容即可启动一个监听了TCP的X客户端:

xinit /usr/bin/xterm -- -listen tcp # Linux
xinit /usr/local/bin/xterm -- -listen tcp # FreeBSD

                (需要注意的是,FreeBSD默认安装包和配置都在/usr/local/而不是/,因此以下涉及到文件存在于不同位置的配置都以第一行为Linux,第二行为FreeBSD)

                按下Ctrl-Alt-Fx组合按键,你将看见空白屏幕中有一个xterm。在xterm中运行以下命令以获取你的DISPLAY环境变量:

echo $DISPLAY

                那么我们假设你的输出是:1

                在xterm中运行xterm&,再次启动一个终端,使用ssh登录到你的远程机上,并运行以下命令来查看是否启用了访问控制:

DISPLAY=freebsd:1.0 xhost

                (此处假设你的主机名或ip地址为freebsd,以下相同。在xhost 前添加DISPLAY 的目的是省去设置环境变量)

                假如你的输出类似于以下两种:

access control enabled, only authorized clients can connect
INET:garuda.lan
access control disabled, clients can connect from any host

                那么可以不用继续测试。否则,请遵循以下步骤:

                在本地xterm中运行

xhost + garuda # 请把garuda替换成你的ip地址
xhost + # 完全取消访问控制,仅如果你确定能访问PC上X服务器的只有你自己

                再次在ssh中运行

DISPLAY=freebsd:1.0 xhost

                如果输出正常,那么你的X服务访问已经被允许,可以试着运行一个软件了:

DISPLAY=freebsd:1.0 xterm

        配置默认启用X11 TCP监听

               由于显示管理器各不相同,因此启用的方法也各不相同。

                GNOME桌面 / GDM

                        转载自Xorg服务开启tcp/ip监听,允许其它机器客户端连接,未在FreeBSD上测试

                        编辑/usr/share/gdm/gdm.schemas:

<schema>
  <key>security/DisallowTCP</key>
  <signature>b</signature>
  <default>true</default>
</schema>

                        将default标签内的true改成false即可。

       

                KDE Plasma / SDDM

                        编辑 /etc/sddm.conf (在FreeBSD上,是 /usr/local/etc/sddm.conf),添加:

[XDisplay]
ServerArguments=-listen tcp

                 Lightdm

                        转载自X Window的奥秘,未在FreeBSD上测试

                        运行以下命令以生成Lightdm配置文件:

gzip -cdk /usr/share/doc/lightdm/lightdm.conf.gz | sudo tee -a /etc/lightdm/lightdm.conf

                        然后编辑/etc/lightdm/lightdm.conf,在末尾添加

xserver-allow-tcp=true

         配置自动授权远程主机

                        仅适用于具有静态IP的网络。如果你在使用DHCP或对此不确定,请断开并重新连接网络并查看断开前后ip是否变化。没有变化则适用于此脚本。

                        编辑以下文件,保存到~/.local/bin或任何你看不见的地方:

#!/bin/bash
# FreeBSD用户应该将上面的/bin/bash改成/usr/local/bin/bash
if   xhost | grep garuda  ; then
        exit 0
else
        xhost + garuda
fi

                        本文假设远程机的主机名/IP地址是garuda,请按你的实际状况替换garuda。

                        将它添加到你的Shell先行执行文件中,例如.zshrc.bashrc 或是.profile 中:

bash ~/.local/bin/configure_xhost.sh

                        此处假设你将此脚本添加到了~/.local/bin并命名为configure_xhost.sh

        配置远程机自动使用本地机的DISPLAY环境变量

                        在远程机的~/.ssh/rc 上添加以下:

export DISPLAY="freebsd:0.0"

                        (如果不起作用,那么请添加到默认Shell的先行执行文件rc中)

      

        大功告成!现在试着在ssh中运行一个GUI程序,它应该出现在你本地的桌面上。

效果图:在运行着Plasma的FreeBSD上显示来自Garuda Linux的xfce4-about软件

 配置Verysync

        Verysync 微力同步是一个优秀的文件同步方案,使用它传输文件将会很方便。

        Linux上

                首先进入微力同步官网 - 私有云盘 企业文件同步 团队文件共享协助工具下载一个适用的二进制包

                因为现在Linux大多使用systemd,使用Verysync官方的安装脚本看起来很方便:

curl http://www.verysync.com/shell/verysync-linux-installer/go-installer.sh > go-installer.sh 
chmod +x go-installer.sh
sudo ./go-installer.sh -l $(pwd)/verysync.tar.gz
rm go-installer.sh

                此处认定你将Verysync二进制包放在当前目录下并命名为verysync.tar.gz

                然后启用systemd的开机自启:

sudo systemctl enable verysync

                最后启动服务:

sudo systemctl start verysync

        FreeBSD上

                进入微力同步官网 - 私有云盘 企业文件同步 团队文件共享协助工具下载一个适用的二进制包,并解压:

cd
tar -xf Downloads/verysync.tar.gz
mv verysync* verysync

                此处认定你下载到了~/Downloads/verysync.tar.gz,并希望解压到~/verysync

                在~/.local/bin 编写一个自动启动脚本:

echo "#!/bin/sh
/home/tienyu/verysync/verysync serve --no-browser --no-restart &" >> ~/.local/bin/verysync.sh
chmod +x ~/.local/bin/verysync.sh

                并添加到你桌面环境的自动执行上:

         大功告成!现在,分别在两台机器上打开一个浏览器,配置Verysync吧!

后记

        之所以不用虚拟机而是选择两个物理机协同是出于性能的无奈之举,实际上虚拟机NAT模式因为是从localhost连接所以不用xhost配置,这对我来说也是耗时很长的一项。但实际上经过一点摸索便写成了此文。此文是以FreeBSD用户的立场写的,因此不可能直接搬到Linux上,若介绍得有失偏颇,请斧正。

问题

        不知为何,fish和zsh似乎都不会读取ssh设置的环境变量。因此我在它们的rc文件中设置了DISPLAY。但若需在机器上直接接显示器,那么就会出现在终端中执行应用cannot open display的问题。

        虽然在内网基本感受不到延迟,但UI若太复杂的话(比如wine中运行的某国产IM)还是会出现明显的延迟,影响到使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值