WSL开发系列-gui篇(wslg)

直到2022年,wslg的体验仍较差,难以用于日常开发,大部分情况下不建议使用

导航

0-1 为什么我不推荐使用wslg

  1. 当前wslg不成熟,bug较多,如idea频繁卡死(冻结)导致文件修改丢失、全屏偏移等
  2. 正经人谁用linux是为了gui?

0-2 wslg有哪些应用场景

以我浅薄的开发经历来说,只有一次,
就是使用wsl的chrome浏览器访问被kerberos保护的hadoop web界面。

虽然理论上windows的浏览器也可以做到,但是麻烦得多。
而在linux系统中,kerberos认证就是kinit一个指令的事情。

1 中文环境及输入法

这个教程比较多,而且写得都不一样,但大同小异,需要注意的是
输入法没有切换处理很可能是快捷键被windows系统的覆盖了,
需要手动调出来输入法的配置界面,修改快捷键
比方说fcix的是fcitx-config-gtk3命令
然后我的配置是这样的,就是shift键,保持和windows使用习惯统一

这里的教程可以参考:https://monkeywie.cn/2021/09/26/wsl2-gui-idea-config/
搜狗输入法参考:https://zhuanlan.zhihu.com/p/142206571
搜狗输入法配置命令:sogouIme-configtool
我的配置和里面的不一样, 也没有遇到idea切不出输入法的问题
如果有的话参考文章里的方法或者看:https://github.com/microsoft/wslg/issues/278

2 手动添加软件的快捷方式到开始菜单

1
2
3
cd ~/.local/share/applications
sudo cp *.desktop /usr/share/applications

参考链接:https://juejin.cn/post/6966630345915498526

3 wslg处理快捷方式无法以root用户运行应用

很多linux的软件默认不支持root用户启动,如chrome,会报错:

Running as root without –no-sandbox is not supported. See https://crbug.com/638180

这是报错原理:
wslg的应用通过windows快捷方式启动时,用的是wsl默认用户,
而我设置的默认用户是root,会导致闪退。
因为wslg我使用频率很低,故没必要特地去把默认用户改为普通用户。

这里介绍下几种处理方法

(0) 修改默认用户

使用范围:平常习惯使用sudo命令操作的
有效期:永久

1
2
Ubuntu-20.04 config --default-user 系统安装时创建的用户

(1) 修改linux桌面图标配置(原理:修改启动命令)

适用范围:可以在启动命令中添加特定选项规避问题的,如chrome可使用–no-sandbox
有效期:直到软件更新(图标刷新)

以下为例子

去 /usr/share/applications 目录对chrome的快捷方式进行编辑,修改其启动命令

1
2
vim /usr/share/applications/google-chrome.desktop

在其Exec列添加 –no-sandbox ,如下

1
Exec=/usr/bin/google-chrome-stable --no-sandbox  %U

(2) 修改windows-wslg桌面图标配置(原理:修改调用用户)

适用范围:所有
有效期:重启失效

有些软件(如firefox)就是不支持root用户运行,
这个时候需要修改其windows图标对应启动命令,指定用户启动

如下,linux的图标所在文件夹类似:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Ubuntu-20.04
将快捷方式-属性-目标由“C:\Windows\System32\wslg.exe ~ -d Ubuntu-20.04 firefox”改为
“C:\Windows\System32\wslg.exe ~ -d Ubuntu-20.04 su 用户名 -c firefox”

linux图标
firefox属性

(3)直接shell启动

适用范围:所有
有效期:shell会话

1
2
3
su 普通用户
google-chrome/firefox

4 在wslg使用chrome访问kerberos页面

wslg-chrome安装见:https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps#run-linux-gui-apps

  1. 配置kerberos
    1
    2
    3
    4
    5
    6
    mkdir -p /etc/opt/chrome/policies/managed/
    cat << 'EOF' > /etc/opt/chrome/policies/managed/kerberos.json
    { "AuthServerAllowlist": "*",
    "AuthNegotiateDelegateAllowlist": "*" }
    EOF

  2. 启动
    1
    2
    3
    kinit -kt /home/admin02.service.keytab admin02/adp@HADOOP.COM
    google-chrome --no-sandbox

其他

直接使用windows访问kerberos页面

参考 https://blog.csdn.net/sinat_20554629/article/details/105283518
在Windows上,必须使用Firefox + MIT Kerberos Windows客户端进行认证
不支持edge、chrome、ie等

firefox访问kerberos参考:
https://blog.csdn.net/IUNIQUE/article/details/108615090
https://www.cnblogs.com/kischn/p/7443343.html

具体操作流程参考如下:
1.下载并安装mit kerberos客户端
下载地址:https://web.mit.edu/kerberos/dist/
2.修改PATH
安装完了kerberos就自动的在 PATH 里面加上了自己的目录,但是在最后。
jdk也自带了kerberos工具,所以需要跳转PATH里kerberos的优先级在前面
3.将krb5.conf文件内容复制到krb5.ini
完整默认路径:C:\ProgramData\MIT\Kerberos5\krb5.ini
4.kinit登录
5.修改firefox配置
1. 输入 about:config
2. 修改配置项 network.negotiate-auth.trusted-uris 的值为: master01,worker01
3. 修改配置项 network.auth.use-sspi 的值为: false
4. 重启firefox
6.使用firefox打开kerberos页面

注意:机器重启会导致kinit信息失效


WSL开发系列-gui篇(wslg)
https://linshenkx.github.io/wsl-dev-wslg/
作者
John Doe
发布于
2023年2月11日
许可协议