Câu trả lời:
Cả Unity và Gnome Shell (Gnome 3) đều sử dụng GSinstall ngay bây giờ thay vì GConf. Vì vậy, trong Unity và Gnome Shell, bạn có thể sử dụng công cụ dòng lệnh gsettings
cho việc đó. Giống như gconftool
, nó cho phép bạn nhận hoặc đặt một khóa riêng lẻ.
Bạn có thể lấy URI hiện tại của ảnh nền như sau:
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
Và đặt URI nền như sau (sẽ cập nhật ngay nền màn hình của bạn):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
Lưu ý rằng bạn phải thêm URI bằng "file: //" để nó hoạt động (không giống như gconftool
).
Để làm cho tập lệnh của bạn hoạt động với cả Gnome 2 và Shell / Unity, bạn có thể để nó thực hiện kiểm tra phiên bản Gnome trước:
gnome-session --version
Điều đó sẽ trả về phiên bản của Gnome. Nếu số phiên bản bắt đầu bằng 3, thì gsettings
có thể được sử dụng. Nếu nó trả về một phiên bản bắt đầu bằng 2, hãy để tập lệnh của bạn sử dụng gconftool
thay thế.
Mã này thay đổi ngẫu nhiên hình nền từ một thư mục nhất định.
#!/bin/bash
DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"
Lưu tập lệnh này và chỉnh sửa tập lệnh của bạn bằng lệnh "crontab -e" (nó khởi chạy trình chỉnh sửa nơi bạn đặt dòng này ở cuối tệp):
*/1 * * * * /bin/bash /path/to/script.sh
Câu trả lời này là một chỉnh sửa của câu trả lời ban đầu. Khi tôi đã tiến bộ trong các nghiên cứu về Ubuntu và Linux của mình, tôi đã khám phá ra nhiều cách tiếp cận khác nhau và hiểu sâu hơn về cách thiết lập nền hoạt động trong Ubuntu. Câu trả lời này là nỗ lực của tôi để ghi lại tốt nhất có thể những gì tôi đã học được cho đến nay và được thực hiện với hy vọng rằng tài liệu này có thể hữu ích cho những người khác.
Phần quan trọng là để đặt nền cho máy tính để bàn Unity từ dòng lệnh, bạn có thể sử dụng
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Cách thức hoạt động của Unity là có máy tính để bàn X bên dưới và bên trên là cửa sổ máy tính để bàn của Unity (thực tế là một phiên bản đặc biệt của cửa sổ Nautilus, trình quản lý tệp mặc định của Ubuntu). Vì vậy, khi bạn gọi
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
đặt nền cho cửa sổ Nautilus đặc biệt đó. Khi bạn tắt biểu tượng máy tính để bàn với
gsettings set org.gnome.desktop.background show-desktop-icons false
điều đó sẽ giết chết máy tính để bàn Nautilus và cho bạn thấy máy tính để bàn X xương trần. Đối với máy tính để bàn X xương trần, bạn có thể sử dụng feh
chương trình. Đặc biệt, lệnh này:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Ngoài ra còn có GUI thay thế cho điều đó , nitrogen
. Các phương pháp feh
và nitrogen
cách tiếp cận có thể được sử dụng với các máy tính để bàn khác với Unity, chẳng hạn như openbox
hoặc blackbox
. Cách gsettings
tiếp cận có thể được sử dụng với Unity hoặc máy tính để bàn dựa trên Gnome khác.
Chính xác thì gsettings
lệnh làm gì? Chà, trước hết, tồn tại cơ sở dữ liệu cài đặt dcs cho mỗi người dùng, được dùng để thay thế cho GConf không dùng nữa và có thể truy cập thông qua dconf
lệnh hoặc gsettings
. Cụ thể, chúng tôi đang xử lý ở đây với
org.gnome.desktop.background
lược đồ và một trong các khóa của nó , picture-uri
.
URI, file:///home/JohnDoe/Pictures/cool_wallpaper.png
thực ra là viết tắt của Mã định danh tài nguyên đồng nhất , ban đầu được tạo để sử dụng internet, nhưng có sơ đồ URI tệp , đó là những gì chúng ta thấy ở đây. Điều thú vị về URI là nó cung cấp đường dẫn được mã hóa byte nếu bạn sử dụng ngôn ngữ không phải tiếng Anh, ví dụ với máy tính để bàn Trung Quốc của tôi, tôi đã theo dõi URI cho backgroun của mình:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Tất nhiên, viết ra lệnh mỗi lần là tẻ nhạt và người ta có thể sử dụng một chút phép thuật kịch bản. Chẳng hạn, đây là những gì tôi đã thiết lập ~/.bashrc
để tôi có thể thay đổi nền theo ý muốn:
change_background() {
FILE="'file://$(readlink -e "$1" )'"
if [ "$FILE" != "'file://'" ]
then
gsettings set org.gnome.desktop.background picture-uri "$FILE"
else
echo "File doesn't exist"
fi
}
Hàm này có thể được gọi với đường dẫn tuyệt đối như
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
hoặc với đường dẫn tương đối từ thư mục làm việc hiện tại
change_background Pictures/cool_wallpaper.jpg
Nó cũng thực hiện kiểm tra nếu tập tin tồn tại và giải quyết các liên kết tượng trưng. Điều này có thể được sử dụng trong một tập lệnh shell hoặc là chức năng độc lập để sử dụng hàng ngày.
Tất nhiên, đây không phải là cách duy nhất. Python có API cho Gio (là thư viện chính phía sau gsettings
). Tôi đã viết một gsettings_get
và các gsettings_set
chức năng, khá hữu ích cho các dự án khác, chẳng hạn như Chỉ báo danh sách trình khởi chạy . Trong trường hợp đặt nền, nó cũng có thể được sử dụng và tôi mới sử dụng nó cho câu hỏi này . Đây là một phiên bản đơn giản hóa của cách tiếp cận tương tự:
#!/usr/bin/env python3
"""
Author: Serg Kolo , <1047481448@qq.com>
Date: December, 21,2016
Purpose: script for setting wallpaper, the pythonic way
Written for: https://askubuntu.com/q/66914/295286
"""
from gi.repository import Gio
import os,sys,random
def gsettings_set(schema, path, key, value):
"""Set value of gsettings schema"""
if path is None:
gsettings = Gio.Settings.new(schema)
else:
gsettings = Gio.Settings.new_with_path(schema, path)
if isinstance(value, list):
return gsettings.set_strv(key, value)
if isinstance(value, int):
return gsettings.set_int(key, value)
if isinstance(value,str):
return gsettings.set_string(key,value)
def error_and_exit(message):
sys.stderr.write(message + "\n")
sys.exit(1)
def main():
gschema='org.gnome.desktop.background'
key='picture-uri'
if len(sys.argv) != 2:
error_and_exit('>>> Path to a file is required')
if not os.path.isfile(sys.argv[1]):
error_and_exit('>>> Path "' + sys.argv[1] + \
'" isn\'t a file or file doesn\'t exit')
full_path = os.path.abspath(sys.argv[1])
uri = Gio.File.new_for_path(full_path).get_uri()
gsettings_set(gschema,None,key,uri)
if __name__ == '__main__': main()
Tất nhiên, các quy tắc tương tự cho các tập lệnh cũng được áp dụng ở đây: đảm bảo nó được thực thi cùng chmod +x set_wallpaper.py
và lưu trữ nó trong ~/bin
thư mục (ưu tiên) . Cách sử dụng rất đơn giản: ./set_wallpaper.py Picture/cool_image.py
Mã nguồn của tập lệnh này cũng có sẵn trên kho GitHub của tôi với nhiều tập lệnh khác.
Nhờ câu trả lời tuyệt vời của Serrano, tôi đã có thể viết tập lệnh này mà tôi sử dụng như một phần của tập lệnh thiết lập máy mới để đặt nền đen:
#! /bin/bash
SRC_URI="https://i.imgur.com/uomkVIL.png"
FNAME="/home/$USER/Pictures/black.png"
wget "$SRC_URI" -O "$FNAME"
gsettings set org.gnome.desktop.background picture-uri "$FNAME"