Unity의 명령 줄에서 데스크탑 배경을 변경하는 방법은 무엇입니까?


63

NASA APOD로 매일 바탕 화면 배경을 업데이트하는 스크립트가 있습니다. 11.10으로 업그레이드 한 이후 gconftool-2실제로 데스크톱 배경을 업데이트하는 데 사용 하고 있기 때문에 해당 스크립트의 작동이 중지 된 것 같습니다 . Unity에서이를 수행하는 새로운 방법이 있습니까?

답변:


82

Unity와 Gnome Shell (Gnome 3) 모두 GConf 대신 GSettings를 사용합니다. 따라서 Unity와 Gnome Shell에서는이를 위해 명령 줄 도구 gsettings를 사용할 수 있습니다 . 처럼 gconftool개별 키를 얻거나 설정할 수 있습니다.

다음과 같이 배경 이미지의 현재 URI를 얻을 수 있습니다.

gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'

그리고 배경 URI를 다음과 같이 설정하십시오 (바탕 화면 배경이 즉시 업데이트 됨).

gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg

이 작업을하려면 URI와 "file : //"을 앞에 추가해야합니다 (와 달리 gconftool).

스크립트가 Gnome 2와 Shell / Unity에서 모두 작동하도록하기 위해 먼저 Gnome 버전 확인을 수행 할 수 있습니다.

gnome-session --version

그놈의 버전을 반환합니다. 버전 번호가 3으로 시작 gsettings하면 사용할 수 있습니다. 2로 시작하는 버전을 반환하면 gconftool대신 스크립트를 사용하십시오 .


우분투 12.04에서이 명령을 사용하고 시스템이 추락
YumYumYum

2
@YumYumYum : 시스템에 다른 일이 없으면 위의 명령이 시스템에 충돌을 일으키는 경우는 매우 드 unusual니다.
Serrano

gsettings;)를 사용하여 Cinnamon을 데스크탑 환경 목록에 추가 할 수 있습니다.
MrVaykadji

gconftool과 달리 URI가 "file : //"로 시작해야합니다. <-이것은 중요하다! 다른 곳에서는 언급되지 않았습니다.
Tom

2
이것은 현재 로그인 한 사용자에게 좋습니다. 프로그래밍 방식으로 다른 사용자의 배경 화면을 변경하는 방법을 알고 싶습니다 ! sudo --user = <username> gsettings ...를 시도했지만 실패했습니다.
kaiwan

12

이 코드는 주어진 디렉토리에서 배경 화면을 무작위로 변경합니다.

#!/bin/bash

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

이 스크립트를 저장하고 "crontab -e"명령으로 파일을 편집하십시오 (파일 끝에이 줄을 두는 편집기를 실행합니다).

*/1     *     *     *     *         /bin/bash /path/to/script.sh

1
wallpaper 디렉토리는 wallpaper 파일 만 포함하고 디렉토리는 포함하지 않아야합니다.
loxaxs 2012 년

그러나 grons는 cron에서 작동하지 않습니다. gsettings가 작동하려면 DBUS_SESSION_BUS_ADDRESS 환경 변수를 설정해야합니다. gsets 앞에 세미콜론으로 구분되는 두 줄을 추가하면됩니다. PID = $ (pgrep gnome-session); 내보내기 DBUS_SESSION_BUS_ADDRESS = $ (grep -z DBUS_SESSION_BUS_ADDRESS / proc / $ PID / environ | cut -d = -f2-);
willbradley

6

소개

이 답변은 원래 답변을 편집 한 것입니다. 우분투와 리눅스 연구에서 발전하면서 다양한 접근 방식을 발견했으며 우분투에서 배경을 설정하는 방법에 대한 이해를 심화 시켰습니다. 이 답변은 지금까지 배운 내용을 최대한 문서화하려는 시도이며이 자료가 다른 사람들에게 유용 할 수 있기를 바랍니다.

중요한 부분은 커맨드 라인에서 Unity 데스크탑의 배경을 설정하는 것입니다.

gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'

Unity와 Bare X 데스크톱의 배경 설정

Unity가 작동하는 방식은 맨 아래에 X 데스크탑이 있고, 그 위에 Unity의 데스크탑 창이 있습니다 (사실, Ubuntu의 기본 파일 관리자 인 Nautilus 's window의 특수 인스턴스). 따라서 전화 할 때

gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'

그 특별한 노틸러스 창의 배경을 설정합니다. 데스크톱 아이콘을 비활성화하면

gsettings set org.gnome.desktop.background show-desktop-icons false

그러면 노틸러스 데스크탑이 종료되고 베어 본 X 데스크탑이 표시됩니다. 베어 본 X 데스크탑의 경우 feh프로그램 을 사용할 수 있습니다 . 특히이 명령은 다음과 같습니다.

feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg

이에 대한 GUI 대안도 있습니다 nitrogen. fehnitrogen접근 방법 등의 통일이 아닌 데스크톱, 사용할 수 있습니다 openbox또는 blackbox. 이 gsettings접근 방식은 Unity 또는 다른 그놈 기반 데스크탑과 함께 사용할 수 있습니다.

gsettings 명령 결정

gsettings명령은 정확히 무엇을 합니까? 우선, 각 사용자에 대한 dconf 데이터베이스 데이터베이스 가 있으며 , 이는 더 이상 사용되지 않는 GConf 를 대체하기위한 것이며 dconf명령 또는을 통해 액세스 할 수 있습니다 gsettings. 특히 여기서는 org.gnome.desktop.background스키마와 키 중 하나를 다루고 있습니다 picture-uri.

URI file:///home/JohnDoe/Pictures/cool_wallpaper.png는 실제로 Uniform Resource Identifier의 약자 이며 원래 인터넷 사용을 위해 만들어졌지만 여기에 표시되는 파일 URI 체계가 있습니다. URI와 관련하여 멋진 점은 영어가 아닌 로케일을 사용하는 경우 (예 : 중국어 데스크탑) 바이트에 인코딩 된 경로를 제공한다는 것입니다.'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'

Gsetting을 사용한 스크립팅

물론 매번 명령을 작성하는 것은 지루하며 약간의 스크립팅 마술을 사용할 수 있습니다. 예를 들어 ~/.bashrc다음은 마음대로 배경을 변경할 수 있도록 설정 한 내용 입니다.

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 
} 

이 함수는 다음과 같은 절대 경로로 호출 할 수 있습니다

change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg

또는 현재 작업 디렉토리의 상대 경로

change_background Pictures/cool_wallpaper.jpg

또한 파일이 존재하는지 확인하고 심볼릭 링크를 해결합니다. 이것은 셸 스크립트 또는 일상적인 사용을위한 독립형 기능으로 사용될 수 있습니다.

물론 이것이 유일한 방법은 아닙니다. 파이썬에는 Gio 용 API가 있습니다 (이것은 주요 라이브러리입니다 gsettings). Launcher List Indicator 와 같은 다른 프로젝트에 매우 유용한 a gsettings_getgsettings_set함수를 작성했습니다 . 배경을 설정하는 경우 배경을 사용할 수도 있으며 최근 에이 질문에 사용했습니다 . 동일한 접근 방식의 단순화 된 버전은 다음과 같습니다.

#!/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()

물론, 동일한 스크립트 규칙도 여기에 적용됩니다 : 스크립트를 사용하여 실행 가능하게 chmod +x set_wallpaper.py만들고 (바람직하게) ~/bin폴더에 저장하십시오. 사용법은 간단합니다. ./set_wallpaper.py Picture/cool_image.py 이 스크립트의 소스 코드는 다른 스크립트와 함께 GitHub 리포지토리 에서도 사용할 수 있습니다.


1

Serrano의 대단한 답변 덕분에 새 컴퓨터 설정 스크립트의 일부로 검정색 배경을 설정하는 스크립트를 작성할 수있었습니다.

#! /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"

1

또한 이것을 사용할 수 있습니다 :

dconf write "/org/gnome/desktop/background/picture-uri" "'file:///home/YOUR_USER/bg.png'"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.