dconf-editor와 gsettings가 동일한 데이터베이스에 액세스하면 안 되나요?

dconf-editor와 gsettings가 동일한 데이터베이스에 액세스하면 안 되나요?

이것은 기본적으로 '학문적인' 질문입니다. 구성 시스템 내부를 더 잘 이해하려고 노력하는 것입니다.

나는dconfsystem은 (더 이상 사용되지 않음)을 대체한 gnome3의 새로운 구성 시스템입니다.gconf; 이것은 매우 분명합니다Gconf, Dconf, Gsettings 및 이들 간의 관계.

제 생각에는 프로그램 gsettingsdconf-editor동일한 액세스 방법이 두 가지뿐인 것 같았습니다.dconf데이터베이스에서 입증되었습니다.
dconf란 무엇이고, 그 기능은 무엇이며, 어떻게 사용합니까?

편집: 누군가가 일부 스키마 이름의 대소문자 차이를 알아차렸다는 것을 발견했습니다. 여기를 참조하세요 ---dconf 스키마 이름은 대소문자를 구분합니까?; 그러나 차이점은 이에 국한되지 않는 것 같습니다. 답변 중 하나에 불일치의 예가 있지만 이에 대한 설명을 찾지 못했습니다..

하지만 최근에 나는 에서 액세스할 수 있는 키 gsettingsdconf-editor키가 동일하지 않다는 것을 발견했습니다. 예를 들어, 에 대한 설정은 아래 vino에 있고 (아래 스크린샷 참조) gsettings에는 아래에 있습니다 . 차이점을 설명하는 문서가 있습니까?dconf-editororg.gnome.desktop.remote-accessorg.gnome.Vino

~ 안에g설정:

(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.Vino
org.gnome.Vino alternative-port uint16 5900
org.gnome.Vino authentication-methods ['none']
org.gnome.Vino disable-background false
[...]

그리고:

(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'

하지만dconf 편집기:

dconf 편집기

답변1

  • dconf-editorschema path설정 데이터 트리를 표시하는 데 사용됩니다 . GVariant 데이터베이스에 데이터를 저장하는 데 사용되는 것과 동일한 구조입니다.

  • gsettings(glib-2.0부터) schema id설정 데이터를 표시/가져오는 데 사용됩니다. GSetttings API를 사용하는 다른 애플리케이션과 동일한 방식으로 수행해야 합니다.

  • 둘 다 원하는 대로 설정하는 것은 응용 프로그램 개발자의 몫입니다. (표준 이름 지정에는 일부 제한이 있음) 따라서 path다를 수 있지만 id대부분의 응용 프로그램 개발자는 동일한 단어 시리즈/조합을 사용하는 것을 선호합니다. 일부는 동일한 대문자를 유지하지 않습니다. 예Gnome의 추적기 프로젝트

    <schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
    

    그 외에도 일부 대체 응용 프로그램은 Gnome 데스크탑에 속한 동일한 설정을 공유합니다. 예:input-sources


  • 첫 번째,앱이 엉망이 되어서는 안 됩니다.dconf

    소개부터dconf프로젝트 페이지:

    dconf낮은 수준의 구성 시스템입니다. 주요 목적은 아직 구성 스토리지 시스템이 없는 플랫폼에서 GSettings에 백엔드를 제공하는 것입니다.

  • 데이터는 어디에 저장되어 있나요?(참조:https://wiki.gnome.org/Projects/dconf/SystemAdministrators)

    프로필은 구성 데이터베이스의 목록입니다. Gnome과 Unity가 동일한 프로필을 사용하는 것 같습니다.

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user: 프로필의 첫 번째 데이터베이스는 읽기/쓰기 rw이며 사용자의 홈 디렉터리에 생성됩니다.

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm: 읽기 전용

      $ file /etc/dconf/db/gdm
      /etc/dconf/db/gdm: GVariant Database file, version 0
      

      dconf폴더 의 GVariant 데이터베이스 외에 텍스트 스타일 저장소를 바인딩할 수 있습니다 db.d/*. 예(공지 파일 경로이므로 의 일부임 system-db:gdm):

       $ cat /etc/dconf/db/gdm.d/00-upstream-settings
      
       # This file is part of the GDM packaging and should not be changed.
       #
       # Instead create your own file next to it with a higher numbered prefix,
       # and run
       #
       #       dconf update
       #
      
       [org/gnome/desktop/a11y/keyboard]
       enable=true
      
       [org/gnome/desktop/background]
       show-desktop-icons=false
       ...
      
  • 스키마 파일: schema id& 사이의 관계schema path ( *.gschema.xml)

    내 Quickly 애플리케이션의 data/glib-2.0 폴더에 있는 스키마 XML 파일은 무엇입니까?~에 의해트렌트Quickly 애플리케이션에서 GSettings API를 사용하는 좋은 예와 그의 경험을 바탕으로 한 결론을 보여줍니다.

    비노로 돌아갑니다. GSsettings를 사용하는 각 애플리케이션은 해당 스키마를 정의해야 하며 이를 다음 /usr/share/glib-2.0/schemas/위치(glib 디렉터리)에 저장/설치해야 합니다.

    $ dpkg -L vino | grep -i glib-2.0
    /usr/share/glib-2.0
    /usr/share/glib-2.0/schemas
    /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml
    /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
    
    $ more /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
    <schemalist>
      <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
        <key name='enabled' type='b'>
          <summary>Enable remote access to the desktop</summary>
          <description>
            If true, allows remote access to the desktop via the RFB
            protocol. Users on remote machines may then connect to the
            desktop using a VNC viewer.
          </description>
          <default>false</default>
        </key>
    
        <key name='prompt-enabled' type='b'>
          <summary>Prompt the user before completing a connection</summary>
          <description>
            If true, remote users accessing the desktop are not allowed
            access until the user on the host machine approves the
            connection. Recommended especially when access is not password
            protected.
          </description>
          <default>true</default>
        </key>
    ...
    

    눈치채셨다면 스키마는 및 으로 정의되어 id있습니다 path. 스키마 파일 이름은 id값 뒤에 옵니다.

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xml파일은 사용자 정의 열거 선언용이며 *.gschema.xml동일한 schema id.

    $ cat /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml
    <!-- Generated data (by glib-mkenums) -->
    
    <schemalist>
      <enum id='org.gnome.Vino.VinoIconVisibility'>
        <value nick='never' value='0'/>
        <value nick='always' value='1'/>
        <value nick='client' value='2'/>
      </enum>
    </schemalist>
    
    <!-- Generated data ends here -->
    
    $ gsettings range org.gnome.Vino icon-visibility
    enum
    'never'
    'always'
    'client'
    
    $ gsettings get org.gnome.Vino icon-visibility
    'client'
    
  • 스키마 컴파일(참조:dconf 및 gnome-tweak-tool을 가지고 놀기)

    설치 프로세스(dpkg 트리거 포함)의 일부로 스키마는 glib-compile-schemas도구(glib의)를 사용하여 컴파일됩니다.

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas
    

    *.gschema.xml바이너리 파일로 컴파일됩니다/usr/share/glib-2.0/schemas/gschemas.compiled

  • 공급업체 재정의 파일( *.gschema.override)

    스키마 파일 외에도 glib-compile-schemas읽기공급업체 재정의파일은 스키마에 있는 키의 기본값을 재정의할 수 있는 키 파일입니다(참조:man glib-compile-schemas). 여기에는 업스트림 스키마 기본값을 재정의하기 위해 Ubuntu 배포에서 수행한 변경 사항이 포함되어 있습니다.

    $ ls /usr/share/glib-2.0/schemas/*.gschema.override
    /usr/share/glib-2.0/schemas/10_compiz-gnome.gschema.override
    /usr/share/glib-2.0/schemas/10_desktop-base.gschema.override
    /usr/share/glib-2.0/schemas/10_evolution-common.gschema.override
    /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override
    /usr/share/glib-2.0/schemas/10_gnome-shell.gschema.override
    /usr/share/glib-2.0/schemas/10_gnome-system-log.gschema.override
    /usr/share/glib-2.0/schemas/10_gsettings-desktop-schemas.gschema.override
    /usr/share/glib-2.0/schemas/10_libgtk-3-common.gschema.override
    /usr/share/glib-2.0/schemas/10_ubuntu-settings.gschema.override
    /usr/share/glib-2.0/schemas/20_ubuntu-gnome-default-settings.gschema.override
    
    $ cat /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override
    [org.gnome.desktop.wm.keybindings]
    switch-input-source=['<Super>space']
    switch-input-source-backward=['<Shift><Super>space']
    

    대체 파일 사용의 예는 다음을 참조하십시오.Ubuntu Live CD를 사용자 정의하는 방법은 무엇입니까?(5. 사용자 정의 2: 배경 및 테마).

  • 파일 잠금

    현재 dconf는 키별 잠금만 지원하고 하위 경로 잠금은 지원하지 않습니다. 사용자 정의 값은 계속 저장되지만 user-db응용 프로그램에는 영향을 미치지 않습니다. dconf/gsettings는 잠긴 키 대신 기본값을 반환합니다. 잠금 파일은 db.d/locks/. 예:

    $ cat /etc/dconf/db/gdm.d/locks/00-upstream-settings-locks 
    /org/gnome/desktop/a11y/keyboard/enable
    /org/gnome/desktop/background/show-desktop-icons
    /org/gnome/desktop/lockdown/disable-application-handlers
    /org/gnome/desktop/lockdown/disable-command-line
    /org/gnome/desktop/lockdown/disable-lock-screen
    /org/gnome/desktop/lockdown/disable-log-out
    /org/gnome/desktop/lockdown/disable-printing
    /org/gnome/desktop/lockdown/disable-print-setup
    /org/gnome/desktop/lockdown/disable-save-to-disk
    /org/gnome/desktop/lockdown/disable-user-switching
    ...
    

    잠금을 수정한 후 효과적으로 실행하려면 다음을 수행하세요.

    sudo dconf update
    

    좋은 쇼케이스:dconf 설정: 기본값 및 잠금

  • 전역 설정 변경

    gsettings/ 의 기본값 dconf-editoruser-db. 을 변경하려면 system-db새 재정의 파일을 작성하고 스키마를 다시 컴파일하세요.

    나는 이것을 작동시킬 수 없었다:

    sudo su gdm -c 'gsettings ...'
    

    다른 답변도 여기에 없습니다기본/전역 Gnome 환경 설정 지정(Gnome 3), 아마도 이전 릴리스에 대한 것일 수 있습니다.

관련 정보