플라즈마(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을 통해 실행되는 것은 자바스크립트입니다. 이 답변은 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 또는 나중에 두 개의 스크립트에서 검색되었습니다.참고용 스크립트는 다음과 같습니다.)

다음은 원래 질문과 직접 ​​관련된 문서의 예입니다.

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

관련 정보