Jak zmienić tło pulpitu z wiersza poleceń w Unity?
63
Mam skrypt, który codziennie aktualizuje tło pulpitu za pomocą NASA APOD. Od czasu uaktualnienia do wersji 11.10 skrypt przestał działać, prawdopodobnie dlatego, że używam gconftool-2do aktualizacji tła pulpitu. Czy istnieje nowy sposób na zrobienie tego w ramach Jedności?
Zarówno Unity, jak i Gnome Shell (Gnome 3) używają teraz GSettings zamiast GConf. Więc w Unity i Gnome Shell możesz do tego użyć narzędzia wiersza poleceń gsettings. Jak gconftool, pozwala uzyskać lub ustawić indywidualny klucz.
Możesz uzyskać bieżący identyfikator URI obrazu tła w następujący sposób:
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
I ustaw identyfikator URI tła w następujący sposób (który natychmiast zaktualizuje tło pulpitu):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
Zauważ, że musisz dodać identyfikator URI z „file: //”, aby to zadziałało (w przeciwieństwie do gconftool).
Aby skrypt działał zarówno z Gnome 2, jak i Shell / Unity, możesz najpierw pozwolić na sprawdzenie wersji Gnome:
gnome-session --version
To zwróci wersję Gnome. Jeśli numer wersji zaczyna się od 3, gsettingsmożna go użyć. Jeśli zwraca wersję zaczynającą się od 2, pozwól skryptu użyć gconftoolzamiast tego.
@YumYumYum: powyższe polecenia powodują awarię systemu, chyba że dzieje się coś innego.
Serrano
Możesz dodać Cynamon do listy Środowiska pulpitu za pomocą gsettings;)
MrVaykadji
Zauważ, że musisz dodać identyfikator URI z „file: //”, aby to zadziałało (w przeciwieństwie do gconftool). <- To ważne! Nigdzie indziej nie znalazłem tego wyraźnie wymienionego.
Tom
2
To jest w porządku dla zalogowanego użytkownika. Chciałbym wiedzieć, jak programowo zmienić tapetę innego użytkownika! Próbowałem sudo --user = <nazwa użytkownika> ustawienia ... ale to się nie udało.
Katalog tapet musi zawierać tylko pliki tapet i żaden katalog.
loxaxs
gsettings nie będą jednak działać z crona. musisz ustawić zmienną środowiskową DBUS_SESSION_BUS_ADDRESS, aby ustawienia działały. Możesz to zrobić, dodając te dwie linie przed ustawieniami (linie oddzielone średnikami :) PID = $ (pgrep gnome-session); eksport DBUS_SESSION_BUS_ADDRESS = $ (grep -z DBUS_SESSION_BUS_ADDRESS / proc / $ PID / environment | cut -d = -f2-);
willbradley,
6
Wprowadzenie
Ta odpowiedź jest edycją oryginalnej odpowiedzi. W miarę postępów w badaniach nad Ubuntu i Linuksem odkryłem różne podejścia i pogłębiłem wiedzę o tym, jak ustawienie tła działa w Ubuntu. Ta odpowiedź jest moją próbą udokumentowania jak najlepiej tego, czego się nauczyłem do tej pory, i mam nadzieję, że ten materiał może być przydatny dla innych.
Ważną częścią jest to, że możesz ustawić tło pulpitu Unity z wiersza poleceń, możesz użyć
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Ustawianie tła w Unity vs goły pulpit X.
Sposób działania Unity polega na tym, że poniżej znajduje się pusty pulpit X, a powyżej okno pulpitu Unity (które w rzeczywistości jest specjalną instancją okna Nautilusa, domyślnego menedżera plików Ubuntu). Tak więc, kiedy dzwonisz
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
który ustawia tło dla tego specjalnego okna Nautilus. Po wyłączeniu ikon pulpitu za pomocą
gsettings set org.gnome.desktop.background show-desktop-icons false
który zabije pulpit Nautilus i pokaże pulpit X od podstaw. W przypadku pulpitu X goły kość można użyć fehprogramu. W szczególności to polecenie:
Jest także alternatywą dla GUI, że nitrogen. fehI nitrogenpodejścia mogą być stosowane z pulpitów innych niż jedność, jak openboxi blackbox. gsettingsPodejście może być używany z Jedności lub innego GNOME oparte.
Disecting polecenia gsettings
Co dokładnie robi gsettingspolecenie? Po pierwsze, istnieje baza danych dconf z ustawieniami dla każdego użytkownika, która ma zastąpić przestarzały GConf i jest dostępna za pomocą dconfkomendy lub gsettings. W szczególności, mamy tu do czynienia ze
org.gnome.desktop.backgroundschematem a jednym z jej kluczy picture-uri.
Identyfikator URI, który file:///home/JohnDoe/Pictures/cool_wallpaper.pngfaktycznie oznacza Uniform Resource Identifier , który pierwotnie został stworzony do użytku w Internecie, ale istnieje schemat pliku URI , który widzimy tutaj. Co fajne w URI jest to, że daje ścieżkę zakodowaną w bajtach, jeśli używasz ustawień narodowych innych niż angielski, na przykład na moim chińskim pulpicie, mam następujący URI dla mojego tła:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Skrypty z ustawieniami
Oczywiście pisanie polecenia za każdym razem jest żmudne i można użyć odrobiny magii skryptowej. Na przykład oto, co ustawiłem, ~/.bashrcaby móc dowolnie zmieniać tło:
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
}
Tę funkcję można wywołać za pomocą ścieżki bezwzględnej, takiej jak
lub ze względną ścieżką z bieżącego katalogu roboczego
change_background Pictures/cool_wallpaper.jpg
Sprawdza również, czy plik istnieje i rozwiązuje dowiązania symboliczne. Może to być użyte w skrypcie powłoki lub jako samodzielna funkcja do codziennego użytku.
Oczywiście nie jest to jedyny sposób. Python ma interfejs API dla Gio (który jest główną biblioteką gsettings). Napisałem a gsettings_geti gsettings_setfunkcje, które były całkiem przydatne dla innych projektów, takich jak Launcher List Indicator . W przypadku ustawienia tła można go również użyć i użyłem go niedawno do tego pytania . Oto uproszczona wersja tego samego podejścia:
#!/usr/bin/env python3"""
Author: Serg Kolo , <[email protected]>
Date: December, 21,2016
Purpose: script for setting wallpaper, the pythonic way
Written for: https://askubuntu.com/q/66914/295286
"""from gi.repository importGioimport os,sys,random
def gsettings_set(schema, path, key, value):"""Set value of gsettings schema"""if path isNone:
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')ifnot 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()
Oczywiście obowiązują tu również te same zasady dla skryptów: upewnij się, że jest on wykonywalny chmod +x set_wallpaper.pyi przechowuj go (najlepiej) w ~/binfolderze. Użycie jest proste: ./set_wallpaper.py Picture/cool_image.py kod źródłowy tego skryptu jest również dostępny w moim repozytorium GitHub z wieloma innymi skryptami.
Dzięki niesamowitej odpowiedzi Serrano udało mi się napisać ten skrypt, którego używam jako części moich nowych skryptów konfiguracji maszyny, aby ustawić czarne tło:
Ten kod losowo zmienia tapetę z danego katalogu.
Zapisz ten skrypt i edytuj go za pomocą polecenia „crontab -e” (uruchamia edytor, w którym umieszczasz ten wiersz na końcu pliku):
źródło
Wprowadzenie
Ta odpowiedź jest edycją oryginalnej odpowiedzi. W miarę postępów w badaniach nad Ubuntu i Linuksem odkryłem różne podejścia i pogłębiłem wiedzę o tym, jak ustawienie tła działa w Ubuntu. Ta odpowiedź jest moją próbą udokumentowania jak najlepiej tego, czego się nauczyłem do tej pory, i mam nadzieję, że ten materiał może być przydatny dla innych.
Ważną częścią jest to, że możesz ustawić tło pulpitu Unity z wiersza poleceń, możesz użyć
Ustawianie tła w Unity vs goły pulpit X.
Sposób działania Unity polega na tym, że poniżej znajduje się pusty pulpit X, a powyżej okno pulpitu Unity (które w rzeczywistości jest specjalną instancją okna Nautilusa, domyślnego menedżera plików Ubuntu). Tak więc, kiedy dzwonisz
który ustawia tło dla tego specjalnego okna Nautilus. Po wyłączeniu ikon pulpitu za pomocą
który zabije pulpit Nautilus i pokaże pulpit X od podstaw. W przypadku pulpitu X goły kość można użyć
feh
programu. W szczególności to polecenie:Jest także alternatywą dla GUI, że
nitrogen
.feh
Initrogen
podejścia mogą być stosowane z pulpitów innych niż jedność, jakopenbox
iblackbox
.gsettings
Podejście może być używany z Jedności lub innego GNOME oparte.Disecting polecenia gsettings
Co dokładnie robi
gsettings
polecenie? Po pierwsze, istnieje baza danych dconf z ustawieniami dla każdego użytkownika, która ma zastąpić przestarzały GConf i jest dostępna za pomocądconf
komendy lubgsettings
. W szczególności, mamy tu do czynienia zeorg.gnome.desktop.background
schematem a jednym z jej kluczypicture-uri
.Identyfikator URI, który
file:///home/JohnDoe/Pictures/cool_wallpaper.png
faktycznie oznacza Uniform Resource Identifier , który pierwotnie został stworzony do użytku w Internecie, ale istnieje schemat pliku URI , który widzimy tutaj. Co fajne w URI jest to, że daje ścieżkę zakodowaną w bajtach, jeśli używasz ustawień narodowych innych niż angielski, na przykład na moim chińskim pulpicie, mam następujący URI dla mojego tła:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Skrypty z ustawieniami
Oczywiście pisanie polecenia za każdym razem jest żmudne i można użyć odrobiny magii skryptowej. Na przykład oto, co ustawiłem,
~/.bashrc
aby móc dowolnie zmieniać tło:Tę funkcję można wywołać za pomocą ścieżki bezwzględnej, takiej jak
lub ze względną ścieżką z bieżącego katalogu roboczego
Sprawdza również, czy plik istnieje i rozwiązuje dowiązania symboliczne. Może to być użyte w skrypcie powłoki lub jako samodzielna funkcja do codziennego użytku.
Oczywiście nie jest to jedyny sposób. Python ma interfejs API dla Gio (który jest główną biblioteką
gsettings
). Napisałem agsettings_get
igsettings_set
funkcje, które były całkiem przydatne dla innych projektów, takich jak Launcher List Indicator . W przypadku ustawienia tła można go również użyć i użyłem go niedawno do tego pytania . Oto uproszczona wersja tego samego podejścia:Oczywiście obowiązują tu również te same zasady dla skryptów: upewnij się, że jest on wykonywalny
chmod +x set_wallpaper.py
i przechowuj go (najlepiej) w~/bin
folderze. Użycie jest proste:./set_wallpaper.py Picture/cool_image.py
kod źródłowy tego skryptu jest również dostępny w moim repozytorium GitHub z wieloma innymi skryptami.źródło
Dzięki niesamowitej odpowiedzi Serrano udało mi się napisać ten skrypt, którego używam jako części moich nowych skryptów konfiguracji maszyny, aby ustawić czarne tło:
źródło
Możesz także użyć tego:
źródło