プラズマ(KDE)アプレットの強力なコマンドライン(CLI)構成

プラズマ(KDE)アプレットの強力なコマンドライン(CLI)構成

~/.config/plasma-org.kde.plasma.desktop-appletsrcランチャー(「Kickoff」)や時計(少なくともKDE 5の場合)などのKDEデスクトップアプレットの設定。 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

私が知っている限り、インストールの間にこれが起こるという保証はありません。

特定のアプレット(設定ファイルのプラグイン)の値を設定するために使用できるエレガントな方法はありますか?または、特定のアプリケーションの番号をマイニングしてからklunkyコマンドを使用するスクリプトを作成する必要がありますかkwriteconfig5

答え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を介してパネルウィジェットを並べ替えることはうまくいかないことがわかりました。で検索されました。メモ用のスクリプトは次のとおりです。)

以下は、元の質問に直接関連する文書の例です。

// 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

最小構成以外のすべての構成を削除し、また数えるすべての項目は必要に応じて、Containment1と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

関連情報