【问题标题】:Shell script to change wallpaper each time the system boots每次系统启动时更改壁纸的 shell 脚本
【发布时间】:2015-01-11 05:23:13
【问题描述】:

我正在尝试使用 Debian 7.6 x86_64 和 GNOME 3.4.2 在 Kali Linux 中编写一个 shell 脚本,每次系统启动时都会更改背景桌面墙纸,从目录中获取文件并随机选择它们间隔,类似于服务或守护程序。我不想每次启动时都必须通过终端手动执行它,这就是原因,因为我打开了一个与该站点中的其他问题非常相似但不一样的问题。我所做的是将下一行放在 rc.local 中 exit 0 行之前:sh /etc/my_scripts/wallpaper,壁纸脚本内容是我写下的代码。 但它没有什么。我认为问题在于操作系统无法识别用户有效和真实的 UID 和 GID,因为我没有通过终端执行脚本并且它无法访问环境变量,因此它没有不知道是谁创建了这个过程,而不是更改壁纸。我使用函数 seteuid()、setuid()、setegid()、setgid() 和 system() 函数编写了一个 C 程序,该函数运行我在 rc.local 中放置的同一行,但它也不起作用。我也尝试对脚本进行 LSBize 并将其复制到 /etc/init.d 目录中,并使用 update-rc.d 命令和 desktop-nova 或 cortina 等程序创建指向 /etc/rcX.d 目录的符号链接那也行不通。 那么,我能做些什么来达到我的目标呢?感谢和抱歉我的英文和广泛的文字。

#!/bin/sh

wallpaper_changer()
{
    wallpapers=/home/linuxsoldier/Pictures/Favorites2/*
    while true
    do
        wallpaper=`ls $wallpapers | shuf -n1 `
        gsettings set org.gnome.desktop.background picture-uri file://"$wallpaper"
        sleep 15m
    done
}

wallpaper_changer & #To run it in background.

【问题讨论】:

    标签: linux shell debian


    【解决方案1】:

    您使用的脚本似乎有错误。使用 gsetting 命令设置背景图像时,您必须提供文件的完整绝对路径。

    正确的函数如下所示:

    wallpaper_changer()
    {
        wallpapers=/home/linuxsoldier/Pictures/Favorites2/*
        while true
        do
            wallpaper=`ls -d -1 $wallpapers | shuf -n1 `
            gsettings set org.gnome.desktop.background picture-uri file://"$wallpaper"
            sleep 15m
        done
    }
    

    希望对你有帮助。

    【讨论】:

    • 在我的代码中,ls命令输出文件的绝对路径,并保存在壁纸变量中。壁纸变量一直是这样的内容字符串:/home/linuxsoldier/Pictures/Favorites2/landscape.jpg。当我在 gsettings 命令中替换它时,文件图像保持如下: gsettings set org.gnome.desktop.background picture-uri file:///home/linuxsoldier/Pictures/Favorites2/landscape.jpg 这是正确的将文件传递给命令的格式。我不认为这可能是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多