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