ฉันจะติดตั้ง Gsettings Schema โดยไม่มีสิทธิ์รูทได้อย่างไร


14

เวิร์กโฟลว์ทั่วไปเพื่อติดตั้ง Gsettings Schema คือ:

  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/ต้องการสิทธิ์รูท มีวิธีการติดตั้ง schema ไปยังไดเรกทอรีผู้ใช้ที่ไม่ใช่ส่วนกลางหรือไม่?

คำตอบ:


16

คุณสามารถคัดลอกและรวบรวม Gsettings Schemas ของคุณไปยังไดเรกทอรีที่ผู้ใช้เขียนได้:

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

บิตที่ยุ่งยากคือการกำหนดค่าแอปพลิเคชันให้ใช้ไดเรกทอรีนั้น มีสองวิธีในการทำสิ่งนี้:

  • ด้วยGSETTINGS_SCHEMA_DIRตัวแปรสภาพแวดล้อม:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • หรือใช้วัตถุ GSettingsSchemaSource และ GSettingSchema:

    หากคุณสามารถเข้าถึงซอร์สโค้ดของโปรแกรมของคุณคุณสามารถแก้ไขมันเพื่อโหลด schema ที่รวบรวมจากไดเรกทอรีใด ๆ นี่คือวิธีที่จะทำใน Python แม้ว่าคุณสามารถทำได้ในภาษาการเขียนโปรแกรมใด ๆ ด้วยการวิปัสสนา GObject:

    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)

อ้างอิง:


คุณทราบวิธีการตรวจสอบว่ามีการติดตั้งสคีมาแล้วหรือไม่
Pietro Battiston

ตามเอกสารเหล่านี้คุณยังสามารถเพิ่มไดเรกทอรีที่มีglib-2.0/schemasไดเรกทอรีไปยังXDG_DATA_DIRSตัวแปรสภาพแวดล้อม
ntc2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.