Xwayland和Wayland——设置环境变量的最佳方式

Xwayland和Wayland——设置环境变量的最佳方式

我使用的是 Debian 11,并且使用 Sway,它是一个 Wlroot Wayland 合成器。

我将 Sway 设置为每次登录时自动打开(仅限从航站楼内/dev/tty1

┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘ /dev/pts/1
  └─> cat .bash_profile 
    
# Only /dev/tty1 can open sway
if [ "$(tty)" = "/dev/tty1" ]; then
        exec sway
fi

我还设置了环境变量以确保全部应用程序使用 Wayland 后端 ( export QT_QPA_PLATFORM=wayland) 而不是 Xorg ( export QT_QPA_PLATFORM=xcb):

┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘ /dev/pts/1
  └─> cat /etc/environment

export QT_QPA_PLATFORMTHEME=qt5ct

export QT_QPA_PLATFORM=wayland
# export QT_QPA_PLATFORM=xcb

export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_TYPE=wayland

这意味着全部只知道 Xorg 的应用程序将无法启动,因为它们尝试使用 Wayland 后端!

我的解决方案:

为了让它们工作,我们必须首先安装 Xwayland:

┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘ /dev/pts/1
  └─> sudo apt install xwayland

但此后,Xorg 应用程序仍会尝试使用 Wayland,但仍会失败。

就我而言,如果我在执行应用程序之前导出环境变量,则可以使 Xorg 应用程序正常工作。这是例子:

env QT_QPA_PLATFORM=xcb DISPLAY=:0 freecad

笔记:Xorg 使用DISPLAY=:0与 Wayland ( WAYLAND_DISPLAY=wayland-0) 不同的显示标签 ( ),因此如果我们坚持应用程序应该使用 Xorg 后端,我们还要确保为后端提供显示。否则这会失败。

问题:

虽然此解决方案有效,但很难跟上所有 Xorg 应用程序的步伐。例如...

我安装了本机kicad软件包,但 Kicad 不支持 Wayland。所以我必须手动移动它的可执行文件/usr/bin/kicad/usr/bin/kicad.bin

┌───┐
│ $ │ ziga > ziga--workstation > Downloads
└─┬─┘ /dev/pts/0
  └─> sudo mv /usr/bin/kicad /usr/bin/kicad.bin
  

用脚本替换可执行文件 /usr/bin/kicad在执行之前设置所需的环境变量移动的可执行文件IE /usr/bin/kicad.bin

┌───┐
│ $ │ ziga > ziga--workstation > Downloads
└─┬─┘ /dev/pts/0
  └─> sudo touch /usr/bin/kicad

┌───┐
│ $ │ ziga > ziga--workstation > Downloads
└─┬─┘ /dev/pts/0
  └─> sudo chmod +x /usr/bin/kicad

┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘ /dev/pts/1
  └─> cat /usr/bin/kicad
#!/bin/bash
env QT_QPA_PLATFORM=xcb DISPLAY=:0 kicad.bin

这需要很多时间,而且每次重新安装软件包时我都必须重复!这是一个可怕的解决方案。那么还有其他解决办法吗?

我在某处读到可以不设置QT_QPA_PLATFORM并让应用程序自行设置。我必须改变什么?

相关内容