Maxwell s.c Asked: 2020-10-03 12:26:47 +0800 CST2020-10-03 12:26:47 +0800 CST 2020-10-03 12:26:47 +0800 CST 充电时自动更换壁纸的脚本 772 当更改为 AC/Battery 时,有没有办法制作 bash 脚本(或 gnome 扩展)来设置自定义壁纸? gnome scripts wallpaper gnome-shell-extension charging 1 个回答 Voted Best Answer user986805 2020-10-04T16:42:51+08:002020-10-04T16:42:51+08:00 您分三步完成。首先,您需要创建一个 udev 规则。我以我的鼠标为例。 /etc/udev/rules.d/99-battery.rules: ACTION=="change", \ KERNEL=="hidpp_battery_0", \ SUBSYSTEM=="power_supply", \ ATTR{model_name}=="Performance MX", \ TAG+="systemd", \ ENV{SYSTEMD_READY}="1", \ ENV{SYSTEMD_USER_WANTS}="battery@%E{POWER_SUPPLY_STATUS}.service" 如果您对 udev 规则进行了任何更改并且设备已经连接,那么您必须再次明确应用您的规则udevadm trigger。 为您的设备找到有用属性的最简单方法是启动 udev 监视器,连接充电线。现在您应该看到 udev 路径和环境属性。 $ udevadm monitor --udev --environment 使用您的 udev 路径,您可以查询设备的其余属性(在我的情况下): $ udevadm info -a --path='/sys/devices/pci0000:00/0000:00:13.1/usb6/6-3/6-3:1.2/0003:046D:C52B.0006/0003:046D:101A.0007/power_supply/hidpp_battery_0' 接下来,您需要创建一个 systemd 模板。这样的服务称为“实例化”服务。它可以通过服务名称发送单个参数。使用 %-specifiers,可以访问服务中的“参数”。 /etc/systemd/user/[email protected] [Unit] Description=Logitech Battery Service [Service] ExecStart=/opt/bin/battery.sh %i KDE 中没有 dbus 方法来改变背景(至少我知道),所以我不得不使用一个 javascript 片段。 /opt/bin/battery.sh: #!/bin/bash declare -l status=$1 [[ ! $status \ =~ (full|(dis)?charging) ]] && exit 0 if [[ $XDG_SESSION_DESKTOP = KDE ]]; then javascript=$(cat << EOF const o = { wallpaperPlugin: 'org.kde.image', currentConfigGroup: [ 'Wallpaper', 'org.kde.image', 'General' ] } for (i in (d = desktops())) { Object.assign(d[i], o).writeConfig('Image', 'file:///opt/wallpapers/battery_$status.png'); } EOF ) busctl --user call org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell evaluateScript s "$javascript" elif [[ $XDG_SESSION_DESKTOP = GNOME ]]; then dconf gsettings set org.gnome.desktop.background picture-uri "'file:///opt/wallpapers/battery_$status.png'" fi 该脚本将在目录中查找名为battery_full.png、battery_charging.png和的图像。battery_discharging.png/opt/wallpapers/
您分三步完成。首先,您需要创建一个 udev 规则。我以我的鼠标为例。
/etc/udev/rules.d/99-battery.rules:
如果您对 udev 规则进行了任何更改并且设备已经连接,那么您必须再次明确应用您的规则
udevadm trigger
。为您的设备找到有用属性的最简单方法是启动 udev 监视器,连接充电线。现在您应该看到 udev 路径和环境属性。
使用您的 udev 路径,您可以查询设备的其余属性(在我的情况下):
接下来,您需要创建一个 systemd 模板。这样的服务称为“实例化”服务。它可以通过服务名称发送单个参数。使用 %-specifiers,可以访问服务中的“参数”。
/etc/systemd/user/[email protected]
KDE 中没有 dbus 方法来改变背景(至少我知道),所以我不得不使用一个 javascript 片段。
/opt/bin/battery.sh:
该脚本将在目录中查找名为
battery_full.png
、battery_charging.png
和的图像。battery_discharging.png
/opt/wallpapers/