强制 Yakuake 在 KDE 启动时在特定屏幕上运行

强制 Yakuake 在 KDE 启动时在特定屏幕上运行

我有一个外接显示器,有时会将其插入运行 Kubuntu 22.04 的笔记本电脑。KDE 配置为将外接显示器设置为主显示器。

我最喜欢的终端应用程序是 Yakuake,我在 KDE 自动启动中运行它。

我的问题如下。有时我启动系统和/或关闭系统时没有插入外接显示器。当系统关闭时没有插入外接显示器,Yakuake 正在笔记本电脑嵌入式屏幕上运行。

下次,当我启动已插入外接显示器的系统时,Yakuake 仍然停留在嵌入式笔记本电脑的屏幕上,我必须手动单击其选项菜单->屏幕->屏幕 1。

我尝试运行 KDE 启动前脚本来修复 Yakuake 配置。脚本如下,但是没有帮助。

❯ cat ~/.config/plasma-workspace/env/force_yakuake_screen.sh
#!/usr/bin/sh

sed -i -e 's/Screen=.+/Screen=1/' ~/.config/yakuakerc                                                           

当我启动系统并检查内容时~/.config/yakuakerc,它包含“Screen=1”,但应用程序此时已经在屏幕 2(笔记本电脑的嵌入式)上运行。

我曾尝试通过选项菜单手动将 Yakuake 移动到不同的屏幕,这些动作已立即反映在 中~/.config/yakuakerc

这表明 Yakuake 在第一次通过自动启动时以某种方式忽略了此设置。

我不认为这个启动前脚本会在 Yakuake 之后运行,因为我的目录~/.config/plasma-workspace/env/包含其他几个设置环境变量的脚本。这些变量是在 Yakuake 内部运行的 shell 中设置的。

解决我的问题的剩余方法是命令 Yakuake 通过 DBus 更改其屏幕。

我已经检查了 Yakuake DBus 接口,但没有找到任何可以帮助我的方法:

❯ for pth in $(qdbus org.kde.yakuake) ; do
    echo $pth
    qdbus org.kde.yakuake $pth | grep -i screen
done

输出

/
/MainApplication
/Sessions
/Sessions/1
/Windows
/Windows/1
/org
/org/kde
/org/kde/yakuake
/yakuake
/yakuake/MainWindow_1
property read bool org.qtproject.Qt.QWidget.fullScreen
method void org.qtproject.Qt.QWidget.showFullScreen()
/yakuake/sessions
/yakuake/tabs
/yakuake/window

输出显示路径中的布尔属性org.qtproject.Qt.QWidget.fullScreen和方法,但是它们与在某些屏幕上移动应用程序无关。org.qtproject.Qt.QWidget.showFullScreen()/yakuake/MainWindow_1

搜索通过来源表明MainWindow::setScreen负责此操作的函数未暴露给 DBus 接口。

有人可以证实或反驳我最新的猜测吗?

有人可以建议一种方法来实现我的目标(强制 yakuake 始终在屏幕 1 上运行)吗?

相关内容