dconf-editor와 gsettings가 동일한 데이터베이스에 액세스해서는 안됩니까?


34

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

나는 이해 dconf의 시스템은 (사용되지 않음) 대체하고 gnome3의 새로운 구성 시스템 gconf 속성이 ; 이것은 Gconf, Dconf, Gsettings와 그들 사이의 관계 에서 분명 합니다 .

이 프로그램 나에게 듯 gsettings하고 dconf-editor어디는 같은 액세스 할 수있는 두 가지 방법 dconf의 에 뒷받침되는 데이터베이스,
dconf 무엇, 그 기능이 무엇이고, 어떻게 사용합니까?

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

그러나 최근에 나는 접근 가능한 키 gsettingsdconf-editor동일하지 않다는 것을 발견했습니다 . 예를 들어에 대한 설정 vinodconf-editor아래 에 있고 org.gnome.desktop.remote-access(아래 스크린 샷 참조) gsettings 아래에 org.gnome.Vino있습니다. 차이점을 설명하는 문서가 있습니까?

에서 gsettings :

(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-editor에서 :

dconf 편집기

답변:


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

  • gsettings(glib-2.0부터)는 schema id설정 데이터를 표시하거나 가져 오는 데 사용 합니다. GSetttings API를 사용하는 다른 응용 프로그램과 같은 방식입니다.

  • 원하는대로 둘 다 설정하는 것은 응용 프로그램 개발자의 책임입니다. (정식 명명에는 약간의 제한이 있습니다). 따라서 path다를 수 id있지만 대부분의 응용 프로그램 개발자는 동일한 단어 시리즈 / 조합을 선호합니다. 일부는 동일한 대문자를 유지하지 않습니다. 그놈의 트래커 프로젝트 예제

    <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
      

      dconfdb.d/*폴더 에서 GVariant 데이터베이스 외에 텍스트 스타일 저장소를 바인딩 할 수 있습니다. 예 (알림 파일 경로이므로 일부입니다 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 파일은 무엇입니까? by trent 는 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읽습니다. 이 파일은 스키마의 키에 대한 기본값을 재정의 할 수있는 키 파일입니다 (참조 :) . 업스트림 스키마 기본값을 재정의하기 위해 Ubuntu 배포에서 수행 한 변경 사항이 포함되어 있습니다.man glib-compile-schemas

    $ 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-editor은을 편집하는 것 user-db입니다. 를 변경하려면 system-db새 재정의 파일을 작성하고 스키마를 다시 컴파일하십시오.

    나는 이것을 작동시키지 못했습니다.

    sudo su gdm -c 'gsettings ...'
    

    다른 답변은 여기에서 기본 / 전역 그놈 환경 설정 (Gnome 3) 설정 은 이전 릴리스에 대한 것일 수도 있습니다.


1
@Rmano, 나도 그것에 대해 배울 수있는 호기심이있었습니다. 정말 고마워.
user.dz

1
dconf를 사용하여 사용자 별 설정을 정의하는 방법을 설명해 주시겠습니까 (예를 들어, 한 사용자에 대해 하나의 설정 세트를 배포해야합니다 (계정을 만든 직후 ~ / .config / dconf 디렉토리에 필요한 파일 복사)). 두 번째 사용자에게는 어떻게?)? "텍스트 스타일 저장소"인 AFAIK는 시스템 전체 설정에서만 지원됩니다. 사용자 설정 만 덤프 할 수있는 방법이 있습니까 (예 : ~ / .config / dconf / user의 설정)? "dconf dump /"에 대해 알고 있지만 시스템 기본값을 포함하여 전체 사용자 DB를위한 것입니다. 문서가 매우 불완전합니다.
Anatoli

1
@Anatoli, 예, 텍스트 저장소는 시스템 전체 데이터베이스에서만 작동합니다. 실제로 dconf dump /모든 사용자 변경 항목을 덤프합니다. 변경되지 않았거나 재설정 된 항목은 포함되지 않습니다. (예를 들어, 항목이 변경되었거나 해당 값이 기본값과 동일하더라도 설정되어 있음). askubuntu.com/q/420527/26246을 참조하십시오 . 또한 전체 DB가 아니므로 경로를 설정할 수 있습니다. 예 :dconf dump /com/
user.dz

1
@ user.dz, 설명 주셔서 감사합니다. 따라서 사용자 별 설정을 구성하는 유일한 방법은 필요한 설정으로 다른 깨끗한 계정에 'user'GVDB 이진 파일을 만든 다음 .config / dconf 폴더에 복사하는 것입니까? AFAIK, dconf load / < file사용자로 로그인하지 않고 는 사용할 수 없습니다.
Anatoli

1
@Anatoli, 네 그 방법입니다. 비밀번호 나 루트 권한 (보안 규칙)이 필요한 시점을 기록하지 않고 다른 사용자 설정을 쉽게 변경할 수 있습니다. 이것은 작동해야합니다 sudo su username2 -c "dconf load / < file"
user.dz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.