密码保护更改壁纸

密码保护更改壁纸

为了防止某人(除了我之外)更改我的背景,我怎样才能使更改壁纸成为需要密码的操作?

答案1

密码保护更改壁纸

下面的脚本提供了温和的密码保护,用于在“家庭”环境中更改壁纸。之所以温和,是因为密码以纯文本形式存储在脚本中。然而,它应该可以防止普通用户更改壁纸。

它的作用是,当用户更改壁纸时,壁纸会立即变回原样,并提示用户输入密码。如果密码正确,壁纸就会变为新设置的壁纸,否则什么也不会发生。

在此处输入图片描述

为了将风险降到最低,请将脚本以意想不到的名称存储在意想不到的地方,和/或作为隐藏文件存储。

使用方法:

将下面的脚本复制到一个空文件中,在头部部分设置您选择的密码(出于安全原因,我不会选择您的 sudo 密码,因为它是纯文本!)并将其保存为name.py,通过以下命令运行它:

python3 /path/to/name.py

剧本:

#!/usr/bin/env python3

import time
import subprocess

set_password = "monkey"

key = "org.gnome.desktop.background picture-uri "
read = "gsettings get "+key; change = "gsettings set "+key
set_wallpaper = subprocess.check_output(["/bin/bash", "-c", read]).decode("utf-8").strip()
pass_window ='zenity --entry --entry-text="Enter password" --text="Enter password" --title="password" --hide-text'

def check_wall():
    global set_wallpaper
    curr_wallpaper = subprocess.check_output(["/bin/bash", "-c", read]).decode("utf-8").strip()
    if curr_wallpaper != set_wallpaper:
        subprocess.Popen(["/bin/bash", "-c", change+set_wallpaper])
        try:
            entered_password = subprocess.check_output(
                ["/bin/bash", "-c", pass_window]).decode("utf-8").strip()
        except Exception:
            entered_password = None
        if entered_password == set_password:
            subprocess.Popen(["/bin/bash", "-c", change+curr_wallpaper])
            set_wallpaper = curr_wallpaper
    else:
        pass

while True:
    check_wall()
    time.sleep(3)

发表于gist.gisthub

答案2

这是一个很好的挑战。尝试一下,

$ sudo mv /usr/bin/gsettings /usr/bin/gsettings2
$ sudo gedit /usr/bin/gsettings
$ sudo chmod +x /usr/bin/gsettings

当 gedit 出现第二条指令时,添加:

#!/bin/bash
if [ "$1" == "set" ] && [ "$2" == "org.gnome.desktop.background" ] && [ "$3" == "picture-uri" ]; then
    a=$(zenity --entry="Password")
    h1=$(/bin/echo $a | /usr/bin/md5sum | /bin/cut -f1 -d" ")
    h2='a799d7cf3d9ca647f1320fc6bfaf7408' #Password hash
    if [ "$h1" == "$h2" ]; then
    gsettings2 set org.gnome.desktop.background picture-uri $4
    else
        zenity --notification --text="Wrong password. Come again another day"
    fi
else
    $(gsettings2 $@)
fi

撤销,

$ sudo rm /usr/bin/gsettings
$ sudo mv /usr/bin/gsettings2 /usr/bin/gsettings

你可以去这个md5 生成器,输入字符串并替换a799d7cf3d9ca647f1320fc6bfaf7408成你喜欢的任何内容。试着自己找出这对应的内容。你会意识到这是多么安全。

即使有人查看了此文件,如果没有您的密码,他们也无法更改它(这类似于 Linux 存储您的密码的方式:P)。

相关内容