windows 远程 archlinux + i3wm 最佳实践?

2022-07-22 10:03:13 +08:00
 975779964

背景

公司不让用虚拟机,要用 windows + 安全管理软件 ,但可以 申请 远程 虚拟机环境 ,我平时都是用 i3wm+ archlinux 开发 ,i3wm 切换程序 窗口很方便 ,所以想到 用 本机 win+ 远程 虚拟机 archlinux 的 开发模式

常用软件

alacritty , xkeysnail , webstorm , goland ,chrome 等等

xkeysnail 是用来映射按键的 ,好让我盲打 编程中常用的符号,现在 已经离不开了,具体可以看 V2EX 如何打符号的帖子

i3wm 配置

i3wm 基本没有配置 就配置了 个 i3 status bar ,改了 快捷键 也没有装 sddm 登录软件 ,目前 arch 的启动流程是

  1. 开机
  2. 进入命令行页面 ,输入 startx ,进入 i3wm 桌面环境
  3. 启动 alacritty ,chrome 等软件 ,在 alacritty 中 启动 xkeysnail 使用 自定义的 按键 映射 来快速打符号

远程软件安装

安装 了 xrdp tigervnc 两个软件 ,然后 启动 xrdp 服务

在 windows 下 打开 mstsc , 输入 linux 的 ip , 会进入一个 蓝色 的背景页面

会有 session , username ,和 password 三个 表格 字段

session 有 xorg , xvnc ,vnc-any , neutrinordp-any 4 个选项

其中 使用 xorg 选项 输入 用户名密码后 , 就还是一样的蓝背景 ,过一会 说 连接拒绝之类的 ,无法 远程

选择 xvnc 选项,输入用户名密码后, 可以 进 远程 的 i3wm 桌面

选择 vnc-any 和 neutrinordp-any 后 ,都提示要 输入 ip port 和 密码 ,但是我看 对应的端口号 我应该是没有起来 ,所以 输入了 也是黑屏 ,这两个方法 先放弃

使用 xvnc 的方式 远程连接 i3wm 遇到的问题

使用 xvnc 方式 远程连接 i3wm 后 ,正常的 webstorm , chrome 软件 都能打开 ,但是 alacritty 却打不开了 ,还好我还有别的 terminal 备用 , 我打开 了 cool-retro-term 终端 然后输入 alacritty

报错为

$ alacritty
thread 'main' panicked at 'Failed to initialize any backend! Wayland status: NoCompositorListening X11 status: XOpenDisplayFailed', /build/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/mod.rs:619:9 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

然后 我又尝试启动 xkeysnail 按键 映射软件 ,也无法打开 ,报错为

Traceback (most recent call last): [8/4707] File "/usr/lib/python3.10/site-packages/Xlib/support/unix_connect.py", line 119, in get_socket
s = _get_unix_socket(address)
File "/usr/lib/python3.10/site-packages/Xlib/support/unix_connect.py", line 98, in _get_unix_socket
s.connect(address)
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/Xlib/support/unix_connect.py", line 123, in get_socket s = _get_tcp_socket(host, dno) File "/usr/lib/python3.10/site-packages/Xlib/support/unix_connect.py", line 93, in _get_tcp_socket s.connect((host, 6000 + dno)) ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/bin/xkeysnail", line 6, in <module> cli_main() File "/usr/lib/python3.10/site-packages/xkeysnail/init.py", line 62, in cli_main eval_file(args.config) File "/usr/lib/python3.10/site-packages/xkeysnail/init.py", line 6, in eval_file exec(compile(file.read(), path, 'exec'), globals()) File ".config.py", line 4, in <module> from xkeysnail.transform import * File "/usr/lib/python3.10/site-packages/xkeysnail/transform.py", line 16, in <module> def get_active_window_wm_class(display=Xlib.display.Display()): File "/usr/lib/python3.10/site-packages/Xlib/display.py", line 89, in init self.display = _BaseDisplay(display) File "/usr/lib/python3.10/site-packages/Xlib/display.py", line 71, in init protocol_display.Display.init(self, *args, **keys) File "/usr/lib/python3.10/site-packages/Xlib/protocol/display.py", line 89, in init self.socket = connect.get_socket(name, protocol, host, displayno)

File "/usr/lib/python3.10/site-packages/Xlib/support/connect.py", line 87, in get_socket return mod.get_socket(dname, protocol, host, dno) File "/usr/lib/python3.10/site-packages/Xlib/support/unix_connect.py", line 127, in get_socket raise error.DisplayConnectionError(dname, str(val)) Xlib.error.DisplayConnectionError: Can't connect to display ":0": [Errno 111] Connection refused

问题原因猜测

alacritty 和 xkeysnail 在正常的 linux + i3wm 都能打开的

远程 使用 xvnc 的方式 却打不开 ,感觉是 因为 xserver 的环境 变了么 ?

问题

  1. 现在大家都是怎么用 win 远程 i3wm 桌面环境 的呢 ? 需要安装哪些软件
  2. 有在 远程环境下 启动 xkeysnail 和 alacritty 成功的么 ?或者 说 这两个软件 限制如此 ,那么 ,linux 下还有没有其他 按键映射软件 是能在 远程环境下 能 正常工作的 ?
6096 次点击
所在节点    Linux
41 条回复
ScepterZ
2022-07-22 10:10:16 +08:00
如果 vsc 能搞定就用 vsc 吧,现在 vsc remote 用的多就是因为它是在太简单了,啥都不用配置就能用,虽然功能稍微弱点,但是勉强能接受
975779964
2022-07-22 10:12:24 +08:00
@ScepterZ 唉 我 是用 i3wm 的平铺功能 还有按键映射 ,不是 远程开发
ProPh3t
2022-07-22 10:29:49 +08:00
Can't connect to display ":0" 两个问题看起来都是一个问题,即连接不到 DISPLAY:0,可以看看 VNC 下环境变量 DISPLAY 是不是 0 ,从这里排查.
975779964
2022-07-22 10:40:02 +08:00
@ProPh3t 我设置了 DISPLAY=:0 后 ,然后 再次根据 报错提示 设置 环境变量 ,最后 报的错 是 这个
$ alacritty
thread 'main' panicked at 'Failed to initialize any backend! Wayland status: XdgRuntimeDirNotSet X11 status: XOpenDisplayFailed', /build/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/mod.rs:619:9
stack backtrace:
0: 0x55608278545f - <unknown>
1: 0x55608263957c - <unknown>
2: 0x556082758fb4 - <unknown>
3: 0x5560827877ba - <unknown>
4: 0x556082788702 - <unknown>
5: 0x556082788212 - <unknown>
6: 0x556082788186 - <unknown>
7: 0x556082788142 - <unknown>
8: 0x556082464f92 - <unknown>
9: 0x5560825dd4bf - <unknown>
10: 0x55608247ffe3 - <unknown>
11: 0x5560825d62c3 - <unknown>
12: 0x7fc3bbc29290 - <unknown>
13: 0x7fc3bbc2934a - __libc_start_main
14: 0x556082470d35 - <unknown>
15: 0x0 - <unknown>

先不提 alacritty ,这个 有别的命令行 terminal 替代 ,

请问 按键映射 有对应的替代么? 或者 xkeysnail 这个 报错 有办法 解决么 ?
muxueqz
2022-07-22 10:51:32 +08:00
@975779964 在 xvnc 里 echo $DISPLAY 看看?不要改 DISPLAY 的值

另外,xrdp 可能性能不好,也可以试试 x2go/nx 等方案
ProPh3t
2022-07-22 11:07:52 +08:00
@975779964
你是怎么启动 x11vnc 的?是这样吗`$ x11vnc -display :0`?
975779964
2022-07-22 11:16:33 +08:00
@ProPh3t 我在 linux 下是 直接 sudo systemctl enable --now xrdp 这样的就 没有管了 ,然后 在 win 下 是 用 mstsc 然后 有即个选项 ,我选择的是 xvnc 然后 输入用户名和密码就好了
975779964
2022-07-22 11:17:15 +08:00
@muxueqz 我刚下载 了 x2go ,然后我想按 win+d 启动 程序 ,结果 直接 触发 win 的快捷键了, 请问 怎么 设置 不让触发 win 的快捷键呢 ?
haoliang
2022-07-22 11:23:25 +08:00
我有过一次使用经验是,忘了是远程桌面还是 docker 化 chromium ,需要 xhost 的加持,具体命令忘了。楼主可以搜索下。
iamzuoxinyu
2022-07-22 11:42:25 +08:00
> 我刚下载 了 x2go ,然后我想按 win+d 启动 程序 ,结果 直接 触发 win 的快捷键了, 请问 怎么 设置 不让触发 win 的快捷键呢
@975779964 这个只能改 i3 的 leader key 了,你要习惯了 windows 键的位置,可以先在 windows 下将 win 键通过注册表重新映射成 alt 或其它,然后在 i3 里将 leader key 改成 alt 。

> 其中 使用 xorg 选项 输入 用户名密码后 , 就还是一样的蓝背景 ,过一会 说 连接拒绝之类的 ,无法 远程
或许是防火墙的问题?改下 ssh xforward 权限?

另外可以试试用 vcxsrv ,直接 ssh -X 做转发。
muxueqz
2022-07-22 11:52:45 +08:00
MaxTan
2022-07-22 11:58:31 +08:00
直接用 VcXsrv 或者 mobaxterm 自带的 x11 server

不过这样 wm 的 modkey 就不能用 win 键了,需要另外设定
zer
2022-07-22 13:32:42 +08:00
nomachine 远程试过么?
whitegerry
2022-07-22 13:44:51 +08:00
同 archlinux + i3wm ,用的 xrdp ,没有配置过 tigervnc 。
alacritty 可以打开
whitegerry
2022-07-22 13:46:33 +08:00
xkeysnail 没有用过,另外远程连接用的是 xorg 。
975779964
2022-07-22 13:48:44 +08:00
@whitegerry 你是怎么联上的呢? 我 虚拟机 装了 xrdp 和 tigervnc ,但是 远程 以 xorg 的方式 连 是 无法 连上的
whitegerry
2022-07-22 14:06:23 +08:00
@975779964 xrdp 安装参考了这个 gist 里的步骤: https://gist.github.com/GregaVrbancic/71f8e9891f4f70032a9e5882a88839ce
yaoyao1128
2022-07-22 14:23:49 +08:00
如果用 xorg 的话 archwiki 有说

Xorg backend
To use xorgxrdp instead for the backend, install the xorgxrdpAUR package.

Add allowed_users=anybody to /etc/X11/Xwrapper.config to allow anybody to start an X server.

之后建议看下现在所在的 display 号码 有时候分配的不一定是 0
zocome
2022-07-22 15:11:33 +08:00
mark ,同想用 xrdp 远程 arch+i3
beginor
2022-07-22 21:51:22 +08:00
搭车问一下,这样的 x11 用起来卡卡的,是不是没有硬件加速呢?

我记得微软的 hyperv 装 Linux 之后也是用 xrdp ,但是速度很快,非常流畅。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/867916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX