我使用的是 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
并让应用程序自行设置。我必须改变什么?