Không nên soạn thảo trình soạn thảo và cài đặt gs truy cập vào cùng một cơ sở dữ liệu?


34

Đây là một câu hỏi 'học thuật' cơ bản --- để cố gắng hiểu rõ hơn các bộ phận cấu hình hệ thống.

Tôi hiểu rằng hệ thống dconf là hệ thống cấu hình mới trong gnome3 đã thay thế gconf (không dùng nữa) ; điều này khá rõ ràng từ Gconf, Dconf, Gsinstall và mối quan hệ giữa chúng .

Dường như với tôi rằng các chương trình gsettingsdconf-editornơi chỉ có hai cách khác nhau để truy cập cùng một cơ sở dữ liệu dconf , được chứng thực trong
dcs là gì, chức năng của nó là gì và tôi sử dụng nó như thế nào?

EDIT: Tôi phát hiện ra rằng ai đó nhận thấy nó là một sự khác biệt trong trường hợp trong một số tên lược đồ, xem tại đây --- Các tên lược đồ dcs có phân biệt chữ hoa chữ thường không? ; nhưng dường như sự khác biệt không bị hạn chế ở đó. Trong một trong những câu trả lời có một ví dụ về sự không phù hợp, nhưng tôi đã không tìm thấy một giải thích tại sao .

Nhưng gần đây tôi phát hiện ra rằng các khóa có thể truy cập từ gsettingsdconf-editorkhông giống nhau. Ví dụ: cài đặt cho vinodconf-editordưới org.gnome.desktop.remote-access(xem ảnh chụp màn hình bên dưới) trong khi ở cài đặt gs thì chúng ở dưới org.gnome.Vino. Có một số tài liệu giải thích sự khác biệt?

Trong gsinstall :

(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
[...]

và:

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

Nhưng trong trình soạn thảo dconf :

biên tập viên

Câu trả lời:


39
  • dconf-editorsử dụng schema pathđể hiển thị cây dữ liệu cài đặt. Cấu trúc tương tự được sử dụng để lưu trữ dữ liệu trong cơ sở dữ liệu GVariant.

  • gsettings(từ glib-2.0) sử dụng schema idđể hiển thị / nhận dữ liệu cài đặt. Giống như mọi ứng dụng khác nên sử dụng API GSetttings.

  • Tùy thuộc vào nhà phát triển ứng dụng để thiết lập cả hai như anh ấy / cô ấy muốn. (với một số hạn chế cho việc đặt tên chính tắc). Vì vậy, pathcó thể khác với idnhưng hầu hết các nhà phát triển ứng dụng thích sử dụng chuỗi / kết hợp từ giống hệt nhau. Một số không bảo toàn viết hoa. Dự án theo dõi ví dụ từ Gnome

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

    Ngoài ra, một số ứng dụng thay thế chia sẻ cùng các cài đặt thuộc về máy tính để bàn Gnome. Thí dụ:input-sources


  • Đầu tiên, Ứng dụng không nên lộn xộn vớidconf

    Giới thiệu từ trang dự án drc :

    dconflà một hệ thống cấu hình cấp thấp. Mục đích chính của nó là cung cấp phần phụ trợ cho GSinstall trên các nền tảng chưa có hệ thống lưu trữ cấu hình.

  • Dữ liệu được lưu trữ ở đâu? (Tham khảo: https://wiki.gnome.org/Projects/dconf/SystemAdologists )

    Một hồ sơ là một danh sách các cơ sở dữ liệu cấu hình. Có vẻ như Gnome & Unity sử dụng cùng một hồ sơ.

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user: Cơ sở dữ liệu đầu tiên trong hồ sơ là read-write rwvà nó được tạo trong thư mục chính của người dùng.

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm: chỉ đọc

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

      dconfcó thể liên kết một cửa hàng kiểu văn bản ngoài Cơ sở dữ liệu GVariant từ db.d/*thư mục. Ví dụ (Đường dẫn tệp thông báo, vì vậy nó là một phần của 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 Files: Mối quan hệ giữa schema id&schema path ( *.gschema.xml)

    Tệp XML lược đồ trong thư mục data / glib-2.0 của ứng dụng Quickly của tôi là gì? bởi trent cho thấy một ví dụ hay về việc sử dụng API GSinstall trong ứng dụng Nhanh chóng và kết luận của anh ấy dựa trên kinh nghiệm của anh ấy.

    Quay lại với Vino. Mỗi ứng dụng sử dụng Cài đặt GS sẽ xác định lược đồ của nó và nên lưu trữ / cài đặt chúng trong /usr/share/glib-2.0/schemas/(Đó là thư mục 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>
    ...
    

    Nếu bạn nhận thấy, lược đồ được xác định bằng một idvà a path. Tên tệp lược đồ theo sau idgiá trị.

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xmlcác tệp dành cho khai báo liệt kê tùy chỉnh, được sử dụng làm kiểu dữ liệu mới *.gschema.xmlcùng 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'
    
  • Biên dịch Schema's (Tham khảo: Chơi với dconf và gnome-chỉnh-tool )

    Là một phần của quá trình cài đặt (nó có trình kích hoạt dpkg), lược đồ được biên dịch bằng glib-compile-schemascông cụ (từ glib)

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

    *.gschema.xml sẽ được biên dịch thành tệp nhị phân /usr/share/glib-2.0/schemas/gschemas.compiled

  • Tệp ghi đè nhà cung cấp ( *.gschema.override)

    Ngoài các tệp lược đồ, hãy glib-compile-schemasđọc các tệp ghi đè nhà cung cấp , là các tệp chính có thể ghi đè các giá trị mặc định cho các khóa trong lược đồ (Ref man glib-compile-schemas:). Chúng chứa các thay đổi được thực hiện bởi phân phối Ubuntu để ghi đè mặc định lược đồ ngược dòng.

    $ 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']
    

    Ví dụ về sử dụng tập tin ghi đè, Xem Cách tùy chỉnh Ubuntu Live CD? (5. Tùy chỉnh 2: Hình nền và Chủ đề).

  • Khóa tập tin

    Hiện tại, dconf chỉ hỗ trợ khóa mỗi khóa, không có khóa đường dẫn phụ. Các giá trị do người dùng xác định sẽ vẫn được lưu trữ user-dbnhưng sẽ không ảnh hưởng đến các ứng dụng. dconf / gsinstall trả về các giá trị mặc định thay cho các khóa bị khóa đó. Các tập tin khóa được lưu trữ trong db.d/locks/. Thí dụ:

    $ 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
    ...
    

    Sau khi sửa đổi khóa, để được chạy hiệu quả:

    sudo dconf update
    

    Một chương trình giới thiệu tốt: Cài đặt dcs: mặc định và khóa

  • Thay đổi cài đặt toàn cầu

    Mặc định cho gsettings/ dconf-editorlà để chỉnh sửa user-db. Để thay đổi system-db, hãy viết một tệp ghi đè mới và biên dịch lại lược đồ.

    Tôi không thể làm việc này:

    sudo su gdm -c 'gsettings ...'
    

    không phải câu trả lời nào khác ở đây Đặt Tùy chọn Gnome mặc định / Toàn cầu (Gnome 3) , có thể là bản phát hành cũ.


1
@Rmano, tôi cũng có một sự tò mò khi tìm hiểu về nó. Cảm ơn bạn rất nhiều.
user.dz

1
Bạn có thể giải thích cách xác định cài đặt dành riêng cho người dùng bằng cách sử dụng dconf (giả sử, tôi cần triển khai một bộ cài đặt cho một người dùng (sao chép các tệp cần thiết vào thư mục ~ / .config / dconf của anh ấy / cô ấy sau khi tạo tài khoản) và một người khác cho người dùng thứ hai, thế nào?)? AFAIK, "cửa hàng kiểu văn bản" chỉ được hỗ trợ cho các cài đặt toàn hệ thống, phải không? Có cách nào để kết xuất chỉ các cài đặt người dùng (ví dụ: các cài đặt trong ~ / .config / dconf / user) không? Tôi biết về "dconf dump /", nhưng điều này là cho toàn bộ DB người dùng, bao gồm cả mặc định của hệ thống. Các tài liệu là vô cùng không đầy đủ.
Anatoli

1
@Anatoli, Yeah, lưu trữ văn bản chỉ hoạt động cho cơ sở dữ liệu toàn hệ thống. Trên thực tế, dconf dump /tất cả các mục đã thay đổi của người dùng, nó không bao gồm các mục không bao giờ thay đổi hoặc đã được đặt lại. (ví dụ, nó bao gồm các mục đã được thay đổi hoặc đặt ngay cả các giá trị của chúng giống như mặc định). Xem Askubfox.com/q/420527/26246 . Cũng không phải là toàn bộ DB, bạn có thể đặt đường dẫn. ví dụ:dconf dump /com/
user.dz

1
@ user.dz, cảm ơn đã làm rõ. Vì vậy, cách duy nhất để định cấu hình cài đặt dành riêng cho người dùng là tạo tệp nhị phân GVDB của người dùng trên một tài khoản sạch khác với các cài đặt cần thiết và sau đó sao chép nó vào thư mục .config / dconf? AFAIK, không có cách nào để sử dụng dconf load / < filemà không đăng nhập với tư cách người dùng.
Anatoli

1
@Anatoli, Có một cách. Có thể là cách dễ dàng hơn để thay đổi cài đặt người dùng khác mà không cần đăng nhập bao giờ bạn cần mật khẩu hoặc quyền lực gốc của anh ấy (quy tắc bảo mật). Điều này sẽ hoạt động sudo su username2 -c "dconf load / < file"
user.dz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.