我想编写一个 bash 脚本,可以从墙纸中删除当前墙纸播放列表。我所说的播放列表是指 wallch 中的列表,您可以在其中添加图片和文件夹,并告诉 wallch 它可以将它们用作壁纸。
wallch 如何存储此播放列表?sqlite?xml?我可以通过编程访问和修改此播放列表吗?
答案1
当 Wallch 正在运行并更改壁纸时,从 Wallch 列表中删除当前壁纸会相当困难,因为列表是通过内存访问的(也保存在 ~/.config/Wallch/MainWindow.conf 中,但不会被实时读取,此位置用于恢复播放列表,例如,如果计算机崩溃或程序未正确关闭)。
使用以下命令编写一个脚本,在读取 album.wallch 文件时自动更改背景会容易得多
gsettings set org.gnome.desktop.background picture-uri "/path to image/here.jpg"
以及一个‘while’循环。例如:
while read line; do
gsettings set org.gnome.desktop.background picture-uri "$line"
#here do what you want, remove image from the file being read, move image to trash
#(located in ~/.local/share/Trash/files) and mark it as not wallpaper material.
sleep $timeout #<- sleep the timeout you want until the next image
done < album.wallch
另一个解决方案,但太复杂了,如下所示:
- 正常启动 Wallch 并添加一些图像(如果列表中没有)
- 退出 Wallch (Ctrl+Q)
- 使用命令在终端中启动 Wallch
wallch --constant
- 从 ~/.config/Wallch/MainWindow.conf 中删除相应的壁纸
- 做任何你想做的事。
- 从步骤 3 开始重复。
但我真的建议使用第一种解决方案,为此制作你自己的脚本,如果你只想使用 Wallch 来更改背景图像,你应该完全使用直接命令
gsettings set org.gnome.desktop.background picture-uri "/path to image/here.jpg"
答案2
我使用 wallch,但总体上不喜欢它:修改文件列表很麻烦(如您所见)。但是,您可以创建一个充满软链接的目录,并让 wallch 显示这些软链接。然后,您的脚本可以操纵软链接,而 wallch 甚至不会注意到。使用带有 -s 的“ln”命令设置软链接。如果您有 /home/me/Pictures/Backgrounds 作为包含链接的目录,您可以执行以下操作
ln -sf /home/me/Pictures/Vacation2013/GreatPic.jpg /home/me/Pictures/Backgrounds/1.jpg
替换 Backgrounds 目录中的文件“1.jpg”。它将链接到另一个目录中的 GreatPic.jpg,并且可以轻松地通过编程进行替换。使用软链接(-s 选项),这样您就不会硬链接图像。使用“强制”选项(-f 或 -sf)删除并替换目录中的现有链接或文件。
一个问题:这种方法不允许您更改背景墙显示的数量。您只能更改显示的图片。
我尝试了 gsettings 命令,发现“path”部分需要有 file:/blah/blah/blah 格式。我很惊讶地看到http://server.tld/blah/blah/blah不起作用。
能够对当前显示的背景进行处理是否重要?那么,您最好运行 Python 或 Perl 脚本(无论您熟悉什么)并处理信号。例如,您可以为脚本提供一个信号处理程序,使其删除当前显示的文件(如果您想要这样做的话)。