루트 권한없이 Gsettings 스키마를 설치하려면 어떻게해야합니까? 다음과 같은 내용 으로 스키마를

Gsettings 스키마를 설치하는 일반적인 워크 플로는 다음과 같습니다.

  1. 확장자 .gschema.xml가 다음과 같은 내용 으로 스키마를 작성하십시오 .

    <?xml version="1.0" encoding="UTF-8"?>
    <schemalist>
      <schema id="com.companyname.appname" path="/com/companyname/appname/">
          <key type="b" name="mybool">
              <default>false</default>
              <summary>Example summary</summary>
              <description>Example description</description>
          </key>
      </schema>
    </schemalist>
  2. 에 스키마를 복사하십시오 /usr/share/glib-2.0/schemas/.

  3. 이 명령을 실행하여 스키마를 컴파일하십시오.

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

그러나 쓰 /usr/share/glib-2.0/schemas/려면 루트 권한 이 필요합니다. 비전 역 사용자 디렉토리에 스키마를 설치하는 방법이 있습니까?



답변

Gsettings 스키마를 복사하여 사용자 쓰기 가능 디렉토리에 컴파일 할 수 있습니다.

$ cp com.companyname.appname ~/schemas/
$ glib-compile-schemas ~/schemas/

까다로운 부분은 특정 디렉토리를 사용하도록 응용 프로그램을 구성하는 것입니다. 이를 수행하는 두 가지 방법이 있습니다.

  • GSETTINGS_SCHEMA_DIR환경 변수를 사용하여 :

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • 또는 GSettingsSchemaSource 및 GSettingSchema 객체를 사용하십시오.

    프로그램의 소스 코드에 액세스 할 수 있으면 디렉토리에서 컴파일 된 스키마를로드하도록 수정할 수 있습니다. GObject 내부 검사를 사용하여 프로그래밍 언어 로이 작업을 수행 할 수는 있지만 Python에서 수행하는 방법은 다음과 같습니다.

    schema_source = Gio.SettingsSchemaSource.new_from_directory(
        os.path.expanduser("~/schemas"),
        Gio.SettingsSchemaSource.get_default(),
        False,
    )
    schema = schema_source.lookup('com.companyname.appname', False)
    settings = Gio.Settings.new_full(schema, None, None)
    settings.set_boolean('mybool', True)

참고 문헌 :