如何通过脚本控制 KDE 监视器配置?

MJD*_*MJD 5 scripting configuration multiple-monitors kde-plasma

每天早上我来上班,将正在睡觉的笔记本电脑插入办公桌上的大显示器,然后摆弄这个对话框:

\n\n

KDE“显示设置”对话框的屏幕截图

\n\n

我想这种摆弄的结果是“显示设置”应用程序将新的显示器配置写入某个文件,然后向窗口管理器发送一些信号以注意到设置已更改。我想自己做这件事并直接控制它,为此目的以及其他目的。

\n\n

如果我能找到生成 \xe2\x80\x98Display Settings\xe2\x80\x99 对话框的进程的名称,我可以运行它并strace查看它在做什么,但我还没有找到要么出去。

\n\n

我的问题是:

\n\n
\n

该对话框属于哪个程序?我会在输出中寻找什么ps来识别它?当它更改监视器配置时,它实际上在做什么?

\n
\n

MJD*_*MJD 3

xrandr实用程序可以通过脚本进行控制。可以通过运行以下命令获得屏幕截图中显示的配置:

xrandr \
 --output LVDS-1 --mode 1680x1050 --pos 1080x1120 --rotate normal \ 
 --output DVI-D-1 --off --output VGA-1 --mode 1920x1080 --pos 0x0 --rotate left          
Run Code Online (Sandbox Code Playgroud)

为了生成此命令行,我使用了arandr. 它呈现一个类似于原始问题中的对话框,但更简单,然后有一个“保存”选项,可将正确的xrandr调用保存到文件中。

使用该arandr对话框按照我想要的方式配置监视器后,我将配置保存到一个文件中,例如~/.screenlayout/office.sh. 作为 shell 脚本执行此文件将恢复保存的配置。我编写了一个简单的 shell 脚本 ,disp它执行$HOME/.screenlayout/$1.sh,因此当我到达办公室时,我只需在disp office命令行中键入即可恢复办公室监视器配置。当我回家时,我输入disp 1,它运行~/.screenlayout/1.sh,我在其中保存了默认的单显示器配置。

尽管原始问题中的对话框可能xrandr正在运行以更改屏幕配置,但我的帖子中的其他问题仍然没有答案。

[2018-04-08更新:我已经继续使用了disp,这不再是小事了。当前版本位于https://github.com/mjdominus/util/blob/master/bin/disp。一项改进是它有一个-c支持 shell 可编程完成的标志,我将其设置如下:

    complete -F __complete_disp disp

    __complete_disp () {
        COMPREPLY=($(disp -c "$2"))
    }
Run Code Online (Sandbox Code Playgroud)

自从我写这篇回复以来,KDE 本身在使用正确的显示配置方面变得更加聪明。它通常似乎可以识别插入了哪些显示器,并记住上次的配置是相同的,所以我发现自己使用的数量disp比以前少了很多。但有时,它会变得混乱,然后使用 重置配置会很方便disp。]