Plasma (KDE) 小程序的强大命令行 (CLI) 配置

Plasma (KDE) 小程序的强大命令行 (CLI) 配置

KDE 桌面小程序的配置,例如启动器(“Kickoff”)或时钟~/.config/plasma-org.kde.plasma.desktop-appletsrc(至少对于 KDE 5)。我想使用 Ansible 在新系统上根据我的喜好配置小程序,但我找不到可靠的方法来做到这一点。

我知道我可以用来kwriteconfig5改变那里的值,就像这样

kwriteconfig5 --file ~/.config/plasma-org.kde.plasma.desktop-appletsrc \
--group Containments --group 3 --group Applets --group 9 \
--group Configuration --group Appearance \
--key dateFormat isoDate

这会隐藏系统托盘中的一些项目如果遏制数量 (3) 和小程序 (9) 将与时钟小程序匹配,如下所示

[Containments][3][Applets][9]
immutability=1
plugin=org.kde.plasma.digitalclock

据我所知,这不能保证在安装之间会发生。

是否有一些可用的优雅方法来设置特定小程序(插件,在配置文件中)的值?或者是否有必要编写一个脚本来挖掘特定应用程序的数字,然后使用 klunkykwriteconfig5命令?

答案1

bash 上的简化解决方案:

config="plasma-org.kde.plasma.desktop-appletsrc"
grp=""
while IFS= read -r line
do
    [[ $line == *Applets* ]] && grp="$line"
    [[ $line == *org.kde.plasma.digitalclock* ]] && break
done < "$HOME/.config/$config"
ContGrp=$(echo "$grp" | awk -F\] '{print $2}' | awk -F\[ '{print $2}')
ApplGrp=$(echo "$grp" | awk -F\] '{print $4}' | awk -F\[ '{print $2}')

kwriteconfig5 --file "$config" \
  --group Containments --group "$ContGrp" --group Applets --group "$ApplGrp" \
  --group Configuration --group General \
  --key dateFormat isoDate

答案2

我已经找到了 Plasma 5.6 的最佳方法。他们有一个脚本 API,但是,它是通过 QJSEngine 运行的 javascript。这个答案展示了如何从 bash 运行脚本、配置小程序以及添加面板小部件。官方文档中有更多示例。 API 绑定的文档可以在这里找到以便进一步研究。

识别每个小部件需要更改的特定键最好通过读取main.xml小程序源中的小程序文件来完成。

从 bash 运行脚本:

contents=$(<"script.js")
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "$contents"
var allPanels = panels();
var done = false;
for (var panelIndex = 0; panelIndex < allPanels.length; panelIndex++) {
    if (done){
        break;
    }
    var p = allPanels[panelIndex];

    var widgets = p.widgets();
    for (var widgetIndex = 0; widgetIndex < widgets.length; widgetIndex++) {
        var w = widgets[widgetIndex];

        // Cycle through panels and widgets until we find the panel with the pager on it.
        if (w.type != "org.kde.plasma.pager"){
            continue;
        }

        // Add new widget to the same panel
        var wt = p.addWidget("org.kde.windowtitle");
        // Print the IDs so you could grab them from bash if you wanted
        print(`${p.id}\t${wt.id}`)

        done = true;
    }
}

(旁白:我发现通过脚本 API 对面板小部件重新排序是行不通的;它们只会在延迟或其他时间后添加到 AppletOrder 键中的配置中。但是,捕获组 ID 可以让它们从 bash 或 a第二个脚本稍后。这里的脚本供参考

以下是与原始问题直接相关的文档中的示例:

// See previous examples for these functions.
function forEachWidgetInContainmentList(containmentList, callback) { ... }
function forEachWidget(callback) { ... }
function forEachWidgetByType(type, callback) { ... }

function widgetSetProperty(args) {
    if (!(args.widgetType && args.configGroup && args.configKey)) {
        return;
    }

    forEachWidgetByType(args.widgetType, function(widget){
        widget.currentConfigGroup = [args.configGroup];

        //--- Delete when done debugging
        const oldValue = widget.readConfig(args.configKey);
        print("" + widget.type + " (id: " + widget.id + "):");
        print("\t[" + args.configGroup + "] " + args.configKey + ": " + oldValue + " => " + args.configValue);
        //--- End Debug

        widget.writeConfig(args.configKey, args.configValue);
    });
}

widgetSetProperty({
    widgetType: "org.kde.plasma.digitalclock",
    configGroup: "Appearance",
    configKey: "dateFormat",
    configValue: "isoDate",
});

答案3

删除除最低配置之外的所有配置,并且重新编号所有项目如您所愿,只有Containment#1和 Essential Applets

[Containment][1]
lastScreen=0
location=4
plugin=org.kde.panel

...

将其保存到 中~/.config/plasma-org.kde.plasma.desktop-appletsrc,然后kquitapp5 plasmashell && kstart5 plasmashell重新加载。

在您的基本设置和数字保持不变的情况下,KDE 将自动添加其他缺少的行。

答案4

我重写了Олексій Пирогов 的回答作为一个函数:

applet_config="$XDG_CONFIG_HOME/plasma-org.kde.plasma.desktop-appletsrc"

configure_applet(){
  applet="$1"
  confgroup="$2"
  key="$3"
  value="$4"

  grp=""
  while IFS= read -r line
  do
    [[ $line == *Applets* ]] && grp="$line"
    [[ $line == *$applet* ]] && break
  done < "$applet_config"
  ContGrp=$(echo "$grp" | awk -F\] '{print $2}' | awk -F\[ '{print $2}')
  ApplGrp=$(echo "$grp" | awk -F\] '{print $4}' | awk -F\[ '{print $2}')

  kwriteconfig5 --file "$(basename "$applet_config")" \
    --group Containments --group "$ContGrp" --group Applets --group "$ApplGrp" \
    --group Configuration --group General \
    --key "$key" "$value"
}

# Example usage
configure_applet org.kde.plasma.digitalclock General dateFormat "isoDate"
configure_applet org.kde.windowtitle         General        style 3
                                                    # style 3 = Title - Application

相关内容