Ubuntu 17.10 推出 [論壇 - Ubuntu 與 GNOME]
正在瀏覽:
1 名遊客
回覆: Ubuntu 17.10 推出 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
[回到索引]
================================================================================ # 關於「Gio.Settings.bind」 ================================================================================ 參考上面「#50」最後找到的程式碼片段。 寫了簡單的程式範例,放在「GitHub」上。 寫了三種版本 * gjs (README) * python (README) * vala (README) 在「README」裡面有列「API」文件連結。 以上提供參考,給對這部份想要深入探究的人,一個探索的起點。 報告完畢。 ![]() ================================================================================ [回到索引]
2017/11/12 16:48
|
||||||||||
![]() |
回覆: Ubuntu 17.10 推出 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
[回到索引]
================================================================================ # 關於在「gnome-shell」環境的「imports.misc.config」 ================================================================================ 延續「#43」提到的, 繼續來探索「gnome-shell-extension-shortcuts」這個套件。 若系統已經安裝了這個套件,直接執行下面指令
顯示
這一篇主要是探索「/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/convenience.js」這個檔案。 執行
顯示
可以看到在「/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/convenience.js」這個檔案的「第29行」,也就是下面的
================================================================================ 接下來,執行下面指令,下載「gnome-shell」的「Source Package: gnome-shell」。
會下載下面三個檔案 * gnome-shell_3.26.1-0ubuntu5.debian.tar.xz * gnome-shell_3.26.1-0ubuntu5.dsc * gnome-shell_3.26.1.orig.tar.xz 並且解開到「gnome-shell-3.26.1」這個資料夾。 執行上面這個動作的前置作業,請參考「#24」的說明。 ================================================================================ 接下來從上面「#32」提到的「imports.searchPath」的概念, 所以我們要在「gnome-shell-3.26.1/js」這個資料夾探索。 執行
顯示
執行
上面指令的顯示結果就不貼上來了,請自行測試。 ================================================================================ 從「imports.misc.config」應該要找「gnome-shell-3.26.1/js/misc/config.js」 不過只有找到「gnome-shell-3.26.1/js/misc/config.js.in」。 執行
顯示
執行
顯示 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* The name of this package (not localized) */ var PACKAGE_NAME = '@PACKAGE_NAME@'; /* The version of this package */ var PACKAGE_VERSION = '@PACKAGE_VERSION@'; /* 1 if gnome-bluetooth is available, 0 otherwise */ var HAVE_BLUETOOTH = @HAVE_BLUETOOTH@; /* 1 if networkmanager is available, 0 otherwise */ var HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@; /* gettext package */ var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@'; /* locale dir */ var LOCALEDIR = '@datadir@/locale'; /* other standard directories */ var LIBEXECDIR = '@libexecdir@'; var SYSCONFDIR = '@sysconfdir@'; /* g-i package versions */ var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@' ================================================================================ 執行下面指令,切換到「gnome-shell-3.26.1」
接著執行
就會產生一個資料夾「_build」 執行
顯示
這時候,就可以找到「_build/js/misc/config.js」這個檔案 執行
顯示
================================================================================ 接下來就可以在「Gnome Shell / Looking Glass」做一點小實驗。 也可以複習之前「#32」提到的,關於「Looking Glass」的用法。 先在「Evaluator」執行
顯示
然後按下「[object GjsModule misc.config]」,會出現例另一個視窗。 顯示 inspecting: object: [object GjsModule misc.config] GETTEXT_PACKAGE: gnome-shell HAVE_BLUETOOTH: 1 HAVE_NETWORKMANAGER: 1 LIBEXECDIR: /usr/lib/gnome-shell LIBMUTTER_API_VERSION: 1 LOCALEDIR: /usr/share/locale PACKAGE_NAME: gnome-shell PACKAGE_VERSION: 3.26.1 SYSCONFDIR: /etc 可以注意到一些「值」,跟剛剛「./configure」產生出來的「_build/js/misc/config.js」定義的並不想同。 那是因為我剛剛只有執行「./configure」,後面沒有加一些參數。 可以研究「debian/rules」這個檔案,這個檔案可以視為「Makefile」。 ================================================================================ 在「Terminal」執行下面指令
顯示 override_dh_auto_configure: dh_auto_configure -- \ --libdir=/usr/lib \ --libexecdir=/usr/lib/gnome-shell \ $(CONFFLAGS) 從「debian/rules」這個檔案,可以找到「override_dh_auto_configure」這個「rule」, 所以執行
會顯示
關於「debian/rules」其他的細節,建議可以從「$ man dh」開始探索起。 關於「debian/rules」這部份的細節我也尚未去深究,也偏離本篇我原本要闡述的,所以就不繼續探討了。 ================================================================================ 接著來看重新產生的「_build/js/misc/config.js」。
顯示 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* The name of this package (not localized) */ var PACKAGE_NAME = 'gnome-shell'; /* The version of this package */ var PACKAGE_VERSION = '3.26.1'; /* 1 if gnome-bluetooth is available, 0 otherwise */ var HAVE_BLUETOOTH = 1; /* 1 if networkmanager is available, 0 otherwise */ var HAVE_NETWORKMANAGER = 1; /* gettext package */ var GETTEXT_PACKAGE = 'gnome-shell'; /* locale dir */ var LOCALEDIR = '/usr/share/locale'; /* other standard directories */ var LIBEXECDIR = '/usr/lib/gnome-shell'; var SYSCONFDIR = '/etc'; /* g-i package versions */ var LIBMUTTER_API_VERSION = '1' 定義的「值」,跟上面就有一致了。 ================================================================================ 再回到「Looking Glass / Evaluator」執行 輸入「imports.misc.config.」,然後連續按兩下「Tab」鍵,就會看到一些訊息如下
================================================================================ 或是也可以在「Looking Glass / Evaluator」執行
然後在「Terminal」執行下面指令
就可以找到下面這一行
這個技巧,我在「#31」有使用過,也有提到我怎麼找到這個技巧的。 ================================================================================ 再回到「Looking Glass / Evaluator」執行 就可以分別執行下面的指令 * 「imports.misc.config.PACKAGE_NAME」 * 「imports.misc.config.PACKAGE_VERSION」 * 「imports.misc.config.HAVE_BLUETOOTH」 * 「imports.misc.config.HAVE_NETWORKMANAGER」 * 「imports.misc.config.GETTEXT_PACKAGE」 * 「imports.misc.config.LOCALEDIR」 * 「imports.misc.config.LIBEXECDIR」 * 「imports.misc.config.SYSCONFDIR」 * 「imports.misc.config.LIBMUTTER_API_VERSION」 分別顯示 * 「r(11) = gnome-shell」 * 「r(12) = 3.26.1」 * 「r(13) = 1」 * 「r(14) = 1」 * 「r(15) = gnome-shell」 * 「r(16) = /usr/share/locale」 * 「r(17) = /usr/lib/gnome-shell」 * 「r(18) = /etc」 * 「r(19) = 1」 ================================================================================ 以上提供參考 報告完畢 ![]() ================================================================================ [回到索引]
2017/11/13 18:41
|
||||||||||
![]() |
回覆: Ubuntu 17.10 推出 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
[回到索引]
================================================================================ # 關於在「gnome-shell」環境的「imports.misc.extensionUtils」 ================================================================================ 延續「#52」, 繼續從「/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/convenience.js」探索起。 執行
顯示
可以在「第30行」看到「const ExtensionUtils = imports.misc.extensionUtils;」。 ================================================================================ 接下來,從「#52」,下載下來的「Source Package: gnome-shell」探索。 探索「gnome-3-26/js」這個資料夾。 從「imports.misc.extensionUtils」對到「gnome-3-26/js/misc/extensionUtils.js」這個檔案。 ================================================================================ 接下來在「Looking Glass / Evaluator」執行
顯示
點選「[object GjsModule mis.extensionsUtils]」會跳出另一個視窗,顯示如下
================================================================================ 接下來在「Looking Glass / Evaluator」 輸入「imports.misc.extensionUtils.」然後連續按下兩次「tab」鍵,顯示如下的訊息
================================================================================ 在「Looking Glass / Evaluator」 執行
可以看到「/var/log/syslog」,有如下的訊息。
================================================================================ 在「Looking Glass / Evaluator」 執行「imports.misc.extensionUtils.__file__」 顯示
執行「imports.misc.extensionUtils.__moduleName__」 顯示
執行「imports.misc.extensionUtils.__modulePath__」 顯示
執行「imports.misc.extensionUtils.__parentModule__.__modulePath__」 顯示
================================================================================ 在「Looking Glass / Evaluator」 執行
顯示
因為目前在「Looking Glass / Evaluator」執行 所以的到結果是「null」。 ================================================================================ 然而在「misc.extensionUtils」這個模組,有一個「extensions」,存放著「Extension」的紀錄。
顯示
在「Looking Glass / Evaluator」 執行
顯示
點選「[objcet Object]」,會跳出另一個視窗,顯示訊息如下
================================================================================ 還記得下面兩個資料夾嗎? * 「/usr/share/gnome-shell/extensions」 * 「~/.local/share/gnome-shell/extensions」 在「Terminal」 執行
顯示
執行
顯示
關於「demo@home」是我在「#33」提到的範例。 ================================================================================ 接著在「gnome-3-26/js/misc/extensionUtils.js」這個檔案, 可以看到「function createExtensionObject」最下方有一段程式碼。 執行
顯示 let extension = {}; extension.metadata = meta; extension.uuid = meta.uuid; extension.type = type; extension.dir = dir; extension.path = dir.get_path(); extension.error = ''; extension.hasPrefs = dir.get_child('prefs.js').query_exists(null); extensions[uuid] = extension; return extension; ================================================================================ 接下來以「Shortcuts@kyle.aims.ac.za」這個「Extension」為例,也就是來自「gnome-shell-extension-shortcuts」這個套件。 從上面得到的屬性,可以在「Looking Glass / Evaluator」分別執行下面的指令 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].metadata」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].uuid」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].type」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].dir」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].path」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].error」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].hasPrefs」 分別會顯示 * 「r(11) = [object Object]」 * 「r(12) = Shortcuts@kyle.aims.ac.za」 * 「r(13) = 1」 * 「r(14) = [object instance proxy GType:GLocalFile jsobj@0x7fa0c89856d0 native@0x562a3026d8a0]」 * 「r(15) = /usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za」 * 「r(16) =」 * 「r(17) = true」 ================================================================================ 上面「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].dir」, 這個「dir」的「type」是「Gio.File」 執行
顯示
關於「Object.prototype.toString.call」是從「MDN / Javascript / typeof」看到的。 再來執行
顯示
關於「instanceof」,可以參考「MDN / Javascript / instanceof」。 這個「dir」,其實就是等同於「imports.gi.Gio.File.new_for_path('/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za')」 可以在「Looking Glass / Evaluator」 執行
顯示
執行
顯示
================================================================================ 要了解這個,可以在「gnome-3-26/js/misc/extensionUtils.js」這個檔案, 找到「ExtensionFinder / scanExtensions」這個「function (methond)」的實作。 在「Terminal」執行
顯示 187: scanExtensions: function() { 188- let perUserDir = Gio.File.new_for_path(global.userdatadir); 189- FileUtils.collectFromDatadirs('extensions', true, Lang.bind(this, this._loadExtension, perUserDir)); 190- } 接下來在「gnome-3-26/js/misc/fileUtils.js」這個檔案, 觀看「function collectFromDatadirs」的實作。 在「Terminal」執行
顯示
然後「ExtensionFinder / scanExtensions」,在何處被呼叫, 可以在「gnome-3-26/js/ui/extensionSystem.js」這個檔案找尋。 在「Terminal」執行
顯示
================================================================================ 接下來來討論「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].metadata」。 在「Terminal」執行
顯示
在「Looking Glass / Evaluator」 執行 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].metadata.uuid」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].metadata.name」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].metadata.description」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].metadata['shell-version']」 分別會顯示 * 「r(31) = Shortcuts@kyle.aims.ac.za」 * 「r(31) = Shortcuts」 * 「r(31) = This shows a pop-up of useful keyboard shortcuts when Super + S is pressed」 * 「r(31) = 3.22」 對照「/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/metadata.json」這個檔案的定義。 在「Terminal」 執行
顯示 { "name": "Shortcuts", "uuid": "Shortcuts@kyle.aims.ac.za", "description": "This shows a pop-up of useful keyboard shortcuts when Super + S is pressed", "gettext-domain": "Shortcuts", "settings-schema": "org.gnome.shell.extensions.shortcuts", "shell-version": [ "3.22" ] } 相關的實作 執行
顯示
================================================================================ 最後來討論「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].imports」 和「imports['Shortcuts@kyle.aims.ac.za']」。 在「Looking Glass / Evaluator」 執行
顯示
執行
顯示
================================================================================ 執行
顯示
執行
顯示
================================================================================ 相關的實作, 可以在「gnome-3-26/js/misc/extensionUtils.js」這個檔案, 找到「function installImporter」。 在「Terminal」,執行
顯示 151- 152:function installImporter(extension) { 153- let oldSearchPath = imports.searchPath.slice(); // make a copy 154- imports.searchPath = [extension.dir.get_parent().get_path()]; 155- // importing a "subdir" creates a new importer object that doesn't affect 156- // the global one 157- extension.imports = imports[extension.uuid]; 158- imports.searchPath = oldSearchPath; 159-} 160- ================================================================================ 在「Looking Glass / Evaluator」 執行
顯示
可以對照到「/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/extension.js」。 所以可以執行
顯示
然後在「TopBar」的「Shortcuts按鈕」消失了。 接著執行
顯示
然後在「TopBar」的「Shortcuts按鈕」再度出現了。 ================================================================================ 在「Looking Glass / Evaluator」 執行
顯示
可以對照到「/usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/convenience.js」。 所以可以分別執行 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].imports.convenience.getSettings().get_boolean('use-custom-shortcuts')」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].imports.convenience.getSettings().get_string('shortcuts-file')」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].imports.convenience.getSettings().get_boolean('show-icon')」 分別顯示 * 「r(71) = false」 * 「r(72) = /usr/share/gnome-shell/extensions/Shortcuts@kyle.aims.ac.za/shortcuts.json」 * 「r(73) = true」 這個可以在「Terminal」,執行「apt-get source gnome-shell-extension-shortcuts」下載「Source Package: gnome-shell-extension-shortcuts」。 找到「gnome-shell-extension-shortcuts-1.1.0/src/schemas/org.gnome.shell.extensions.shortcuts.gschema.xml」這個檔案。
相關的概念,可以參考「#43」這篇。 所以也可以在「Looking Glass / Evaluator」,分別執行下面兩個指令 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].imports.convenience.getSettings().set_boolean('show-icon', true)」 * 「imports.misc.extensionUtils.extensions['Shortcuts@kyle.aims.ac.za'].imports.convenience.getSettings().set_boolean('show-icon', false)」 ================================================================================ 額外一提的 關於「const Lang = imports.lang;」可以探索「gjs-1.50.1/modules/lang.js」和「gjs-1.50.1/modules/_legacy.js」 關於「const Signals = imports.signals;」可以探索「gjs-1.50.1/modules/signals.js」 另外附上最近找資料過程中找到的連結 * https://ptomato.wordpress.com/2017/05/22/the-gjs-documentation-is-back/ * https://ptomato.wordpress.com/tag/gnome/ * https://ptomato.wordpress.com/tag/javascript/ * https://ptomato.wordpress.com/tag/gjs/ ================================================================================ 以上提供參考 報告完畢 ![]() ================================================================================ [回到索引]
2017/11/15 17:08
|
||||||||||
![]() |
回覆: Ubuntu 17.10 推出 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
[回到索引]
================================================================================ # 如何透過「gsettings」設定「桌面」顯示「ICON」 ================================================================================ ## 緣起 延續「#2 回覆: 關於桌布切換軟體 variety」這篇討論。 在探索「gnome-shell」時, 找到「gnome-shell-3.26.1/js/ui/background.js」這個檔案。 然後無意間看到「gnome-shell-3.26.1/js/ui/backgroundMenu.js」這個檔案的實作內容。 發現到該實作,在桌面滑鼠按下右鍵,出現的選項,只有三個選項「Change Background…」,「Display Settings」,「Settings」。 跟我目前在桌面滑鼠按下右鍵,少了很多。 並且印象中,那個選單應該是「nautilus」在控制的。 後來聯想到在「gnome-tweak-tool」的「Desktop」,有一個選項「Show Icons」可以設定。 只要將該設定,設為「OFF」,這樣在桌面,按下滑鼠右鍵,出現的選單就只有三個選項, 也就是「gnome-shell-3.26.1/js/ui/backgroundMenu.js」這個檔案的實作內容。 ================================================================================ ## 探索「gnome-tweak-tool」 執行下面指令,下載「gnome-tweak-tool」的「Source Package: gnome-tweak-tool」。
然後執行
顯示
就可以找到「gnome-tweak-tool-3.26.2.1/gtweak/tweaks/tweak_group_desktop.py」這個檔案。 並且可以找到「org.gnome.desktop.background show-desktop-icons」 ================================================================================ ## get 執行
顯示
執行
顯示
================================================================================ ## set 執行
接著執行
顯示
接著執行
顯示
而「nautilus-desktop」那一筆不見了。 在桌面的「ICON」都不見了,並且在桌面,滑鼠按下右鍵,出現的選單,就是顯示剛剛提到的只有三個選項。 ================================================================================ ## reset 執行
接著執行
顯示
接著執行
顯示
而「nautilus-desktop」那一筆右再度出現了,並且「pid」是新的。 ================================================================================ ## 探索 schema 執行
顯示 /usr/share/glib-2.0/schemas/10_ubuntu-settings.gschema.override:show-desktop-icons = true Binary file /usr/share/glib-2.0/schemas/gschemas.compiled matches /usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml: <key name="show-desktop-icons" type="b"> ================================================================================ ## override 執行
顯示 59-[org.gnome.desktop.background:ubuntu] 60:show-desktop-icons = true 61- 這部份的概念,可以參考「#8 回覆: Ubuntu Linux 17.10 螢幕鎖定失效」。 ================================================================================ ## schema 執行
顯示 59: <key name="show-desktop-icons" type="b"> 60- <default>false</default> 61- <summary>Have file manager handle the desktop</summary> 62- <description> 63- If set to true, then file manager will draw the icons on the desktop. 64- </description> 65- </key> 這部份的概念,可以參考「#7 回覆: Ubuntu Linux 17.10 螢幕鎖定失效」。 ================================================================================ 下一篇「#55」來紀錄進一步的探索。 ================================================================================ [回到索引]
2017/11/18 1:10
|
||||||||||
![]() |
回覆: Ubuntu 17.10 推出 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
[回到索引]
================================================================================ # 關於「AutostartCondition」for「Desktop Entry」in「GNOME Session」 ================================================================================ 延續上一篇「#54」, 提到可以透過「gesttngs」設定「org.gnome.desktop.background show-desktop-icons」是「true」或「false」來切換桌面是否顯示「ICON」。 一開始我探索的方向,是從之前「#48」提到的概念去找, 所以我先探索「gnome-settings-daemon」。 ================================================================================ ## 探索「gnome-settings-daemon」 執行下面指令,下載「gnome-settings-daemon」的「Source Package: gnome-settings-daemon」。
然後執行
顯示
執行
沒有顯示任何結果,直接跳下一個字元。 我找不到任何跟「nautilus-desktop」相關的檔案。 我還看不太懂「gnome-settings-daemon-3.26.1/plugins/xsettings/gsd-xsettings-manager.c」, 還聯想到之前寫的一篇探索紀錄「#3 回覆: 請教一個弱弱的問題,為什麼有些ubuntu的C code有"C"的圖示」, 裡面有紀錄一些連結,是關於「xsettings」。 不過沒能完全弄懂。 ================================================================================ 推測探索方向,應該不是我原本預期的那樣。 後來想到執行「pstree」,觀察「nautilus-desktop」這個「process」是由誰產生的, 觀察到「nautilus-desktop」是由「/usr/lib/gnome-session/gnome-session-binary」產生的。 可以直接執行「pstree」直接觀察。 或是執行
顯示
執行
顯示
執行下面指令,只觀看「909」底下的
顯示 (以下有些process有省略沒貼出來) gnome-session-b(909)─┬─ |-nautilus-deskto(2006)-+-{nautilus-deskto}(2011) | |-{nautilus-deskto}(2012) | `-{nautilus-deskto}(2018) 可以觀察到「nautilus-desktop」是由「/usr/lib/gnome-session/gnome-session-binary」產生的。 或是也可以執行
顯示 2006 909 nautilus-desktop 2908 2103 grep --color=auto nautilus-desktop 執行
顯示
================================================================================ ## 初探「gnome-session」 執行下面指令,下載「gnome-session-bin」的「Source Package: gnome-session」。
執行
沒有顯示任何結果,直接跳下一個字元。 我找不到任何跟「nautilus-desktop」相關的檔案。 ================================================================================ ## 探索「nautilus」 執行
顯示
執行
顯示 [Desktop Entry] Type=Application ...略... Name[zh_CN]=文件 Name[zh_HK]=檔案 Name[zh_TW]=檔案 Name=Files Exec=nautilus-desktop OnlyShowIn=GNOME;Unity; AutostartCondition=GSettings org.gnome.desktop.background show-desktop-icons NoDisplay=true 一開始我有注意到「AutostartCondition=GSettings org.gnome.desktop.background show-desktop-icons」這個設定, 但不曉得是什麼作用。 在「Desktop Entry Specification」也沒有查到。 ================================================================================ 後來我想到要觀察「nautilus-desktop」和「gnome-session-binary」這兩個的「/proc/pid/environ」 執行
顯示
執行
顯示
執行
對照顯示結果後,可以發現到「nautilus-desktop」會多出一些「環境變數」如下
聯想到之前「ibus-daemon」的案例「#7 回覆: 討論這篇「如何讓gcin開機後不多次執行」」。 於是使用這些「環境變數」來探索。 ================================================================================ 執行
顯示 gnome-session-3.26.1/debian/data/run-systemd-session:10:dbus-update-activation-environment --systemd GNOME_DESKTOP_SESSION_ID=this-is-deprecated gnome-session-3.26.1/debian/data/run-systemd-session:39:dbus-update-activation-environment --systemd GNOME_DESKTOP_SESSION_ID= gnome-session-3.26.1/gnome-session/main.c:411: /* Some third-party programs rely on GNOME_DESKTOP_SESSION_ID to gnome-session-3.26.1/gnome-session/main.c:414: gsm_util_setenv ("GNOME_DESKTOP_SESSION_ID", "this-is-deprecated"); gnome-session-3.26.1/NEWS:1881:- Fixed #542880, set GNOME_DESKTOP_SESSION_ID environment variable for ================================================================================ 執行
顯示 gnome-session-3.26.1/ChangeLog:6698: main: Set XDG_MENU_PREFIX gnome-session-3.26.1/gnome-session/main.c:418: gsm_util_setenv ("XDG_MENU_PREFIX", "gnome-"); gnome-session-3.26.1/NEWS:398: * Set XDG_MENU_PREFIX ================================================================================ 執行
顯示 gnome-session-3.26.1/doc/man/gnome-session.1:79:.B SESSION_MANAGER gnome-session-3.26.1/gnome-session/gsm-xsmp-server.c:669: gsm_util_setenv ("SESSION_MANAGER", network_id_list); gnome-session-3.26.1/gnome-session/gsm-xsmp-server.c:670: g_debug ("GsmXsmpServer: SESSION_MANAGER=%s\n", network_id_list); gnome-session-3.26.1/tools/gnome-session-selector.c:631: if (getenv ("SESSION_MANAGER") != NULL) ================================================================================ 執行
顯示
然後就可以找到「gnome-session-3.26.1/gnome-session/gsm-autostart-app.c」這個關鍵檔案。 ================================================================================ 至於「GIO_LAUNCHED_DESKTOP_FILE」和「GIO_LAUNCHED_DESKTOP_FILE_PID」,則在「gnome-session」找不到, 必須在「glib2.0」找尋。
================================================================================ 執行
顯示 glib2.0-2.54.1/gio/tests/appinfo-test.c-10- glib2.0-2.54.1/gio/tests/appinfo-test.c:11: envvar = g_getenv ("GIO_LAUNCHED_DESKTOP_FILE"); glib2.0-2.54.1/gio/tests/appinfo-test.c-12- if (envvar != NULL) glib2.0-2.54.1/gio/tests/appinfo-test.c-13- { -- glib2.0-2.54.1/gio/gdesktopappinfo.c-2606- sn_id)); glib2.0-2.54.1/gio/gdesktopappinfo.c:2607: gio_desktop_file = g_getenv ("GIO_LAUNCHED_DESKTOP_FILE"); glib2.0-2.54.1/gio/gdesktopappinfo.c-2608- if (gio_desktop_file != NULL) glib2.0-2.54.1/gio/gdesktopappinfo.c-2609- g_variant_builder_add (&extras_variant, "{sv}", -- glib2.0-2.54.1/gio/gdesktopappinfo.c-2703- envp = g_environ_setenv (envp, glib2.0-2.54.1/gio/gdesktopappinfo.c:2704: "GIO_LAUNCHED_DESKTOP_FILE", glib2.0-2.54.1/gio/gdesktopappinfo.c-2705- info->filename, glib2.0-2.54.1/gio/gdesktopappinfo.c-2706- ================================================================================ 執行
顯示 glib2.0-2.54.1/gio/tests/appinfo-test.c-20- glib2.0-2.54.1/gio/tests/appinfo-test.c:21: envvar = g_getenv ("GIO_LAUNCHED_DESKTOP_FILE_PID"); glib2.0-2.54.1/gio/tests/appinfo-test.c-22- g_assert (envvar != NULL); glib2.0-2.54.1/gio/tests/appinfo-test.c-23- pid_from_env = atoi (envvar); -- glib2.0-2.54.1/gio/gdesktopappinfo.c-2707- envp = g_environ_setenv (envp, glib2.0-2.54.1/gio/gdesktopappinfo.c:2708: "GIO_LAUNCHED_DESKTOP_FILE_PID", glib2.0-2.54.1/gio/gdesktopappinfo.c-2709- "XXXXXXXXXXXXXXXXXXXX", /* filled in child_setup */ glib2.0-2.54.1/gio/gdesktopappinfo.c-2710- TRUE); glib2.0-2.54.1/gio/gdesktopappinfo.c:2711: data.pid_envvar = (char *)g_environ_getenv (envp, "GIO_LAUNCHED_DESKTOP_FILE_PID"); glib2.0-2.54.1/gio/gdesktopappinfo.c-2712- } glib2.0-2.54.1/gio/gdesktopappinfo.c-2713- else ================================================================================ 進一步探索「gnome-session-3.26.1/gnome-session/gsm-autostart-app.c」這個關鍵檔案。 執行
顯示 182: } else if (!g_ascii_strncasecmp (condition_string, "GSettings", len)) { 183- kind = GSM_CONDITION_GSETTINGS; 184- } else if (!g_ascii_strncasecmp (condition_string, "GNOME3", len)) { 185- condition_string = key; ================================================================================ 執行
顯示
執行
顯示 338-static gboolean 339:setup_gsettings_condition_monitor (GsmAutostartApp *app, 340- const char *key) 341-{ ================================================================================ 雖然我還沒有完全弄懂「gnome-session-3.26.1/gnome-session/gsm-autostart-app.c」這個關鍵檔案。 不過稍微閱讀了一下程式碼,做了一些假設和推測, 所以可以先直接來做以下的小實驗。 ================================================================================ 先產生一個檔案「/usr/local/bin/say-hi」,內容填入如下 #!/bin/bash notify-send 'Hello world!' 'This is an example notification.' --icon=dialog-information # https://wiki.archlinux.org/index.php/Desktop_notifications#Usage_in_programming 然後執行下面指令,設為可執行
================================================================================ 再來產生一個檔案「/etc/xdg/autostart/say-hi.desktop」,內容填入如下。 [Desktop Entry] Type=Application Name[zh_CN]=打招呼 Name[zh_HK]=打招呼 Name[zh_TW]=打招呼 Name=SayHi Exec=say-hi OnlyShowIn=GNOME;Unity; AutostartCondition=GSettings org.gnome.desktop.background show-desktop-icons NoDisplay=true 接著登出系統,然後在登入系統。 ================================================================================ 然後就可以透過「gnome-tweak-tool」的「Desktop」,在「Show Icons」那個選項,在「ON」和「OFF」作切換。 會發現,當切換到「ON」時,就會跳出「提示訊息對話框」。 也可以透過上一篇提到的指令來設定,在切換到「ON」時,一樣會跳出「提示訊息對話框」 * 「gsettings set org.gnome.desktop.background show-desktop-icons false」: OFF * 「gsettings set org.gnome.desktop.background show-desktop-icons true」: ON * 「gsettings reset org.gnome.desktop.background show-desktop-icons」: ON ================================================================================ 後來從「gnome-session-3.26.1/gnome-session/README」。 找到相關的連結 * https://wiki.gnome.org/Projects/SessionManagement/ * https://wiki.gnome.org/Projects/SessionManagement/GnomeSession * https://wiki.gnome.org/Projects/SessionManagement/NewGnomeSession ================================================================================ ## D-Bus 過往一些「D-Bus」的相關案例,紀錄在「[索引] 泛Ubuntu 安裝調校」。 執行
顯示
執行下面指令,觀看「/usr/share/doc/gnome-session/dbus/gnome-session.html」
執行
顯示
執行
顯示
執行
顯示
執行
顯示
================================================================================ 以上提供參考 報告完畢 ![]() ================================================================================ [回到索引]
2017/11/18 1:17
|
||||||||||
![]() |
回覆: Ubuntu 17.10 推出 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
[回到索引]
================================================================================ # 如何從「Source Package」查詢「Binary Package」列表 ================================================================================ 以下撰寫本文的測試環境,在「Ubuntu 17.10」。 ================================================================================ 藉著另一個論壇的討論串「解說 Ubuntu 17.10 安裝 phpMyAdmin 步驟!」。 來整理紀錄一些最近剛好有使用到的一些套件操作的技巧。 註: 安裝「phpmyadmin」不見得要全數安裝php的所有套件, 我寫這篇,只是在闡述套件操作的技巧,所以可以套用在探索其他的套件上面。 ================================================================================ ## 查詢「Source Package」列表 以「php」為例,要查詢跟「php」相關的「Source Package」 ## 方式一 先在「Terminal」輸入「apt-cache showsrc php」, 然後按下「Tab鍵」,就會出現下面的列表 php7.1 php-guzzlehttp-ringphp php-raphf php-defaults php-mockery php-sabredav php-finder-facade php-pecl-http phpseclib php-gettext php-propro php-symfony-polyfill ## 方式二 根據上面的原理,找尋「bash-completion」
顯示
可以找到「/usr/share/bash-completion/completions/apt」這個檔案 然後使用「showsrc」當關鍵字,來探索這個檔案 執行
顯示 39: "show" "showsrc" 40- "install" "remove" "purge" "autoremove" 41- "update" 42- "upgrade" "full-upgrade" "dist-upgrade" 43- "edit-sources" 44- "help" -- 128: showsrc) 129- COMPREPLY=( $( compgen -W ' 130- --only-source' -- "$cur" ) ) 131- return 0 132- ;; 133- source) -- 197: source|build-dep|showsrc|policy) 198- COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \ 199- 2> /dev/null ) $( apt-cache dumpavail | \ 200- command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) ) 201- return 0 202- ;; 參考第三段,也就是第「199~200」行,就可以改寫成下面的指令 執行
顯示
### 原始碼套件資訊 找到上面的列表, 接下來就可以搭配「apt-cache showsrc」來觀看「原始碼套件資訊」, 例如「apt-cache showsrc php7.1」,「apt-cache showsrc php-defaults」。 然而「apt-cache showsrc」不一定要接「source package」,也可以接「binary package」。 例如「apt-cache showsrc php7.1-mbstring」,「apt-cache showsrc php-mbstring」。 ### 變數取代 指令也可以採用變數取代展開的方式,改寫成如下
### 寫成function 寫成function,改寫成如下 find_source_package_list () { local PACKAGE="$1" apt-cache dumpavail | grep "^Source: $PACKAGE" | sort -u | cut -f 2 -d ' ' } find_source_package_list "php" ### 進階應用 要產生「BBCode」的列表,可以執行下面指令 (指令因為有些會被展開,所以正確指令要回覆看BBCode原始碼)
就會產生下面的「Source Package」連結列表 * php7.1 * php-defaults * php-finder-facade * php-gettext * php-guzzlehttp-ringphp * php-mockery * php-pecl-http * php-propro * php-raphf * php-sabredav * phpseclib * php-symfony-polyfill ================================================================================ ## 查詢「Binary Package」列表 以「php7.1」為例 ### 方式一 執行
顯示
### 方式二 註: 「方式二」這個方式,查詢到的結果不見得會跟「方式一」完全相同。 請了解「apt-cache showsrc」和「apt-cache search」的用法。 執行
顯示
### 方式三 執行
顯示
### 進階應用 要產生「BBCode」的列表,可以執行下面指令
就會產生下面的「Binary Package」連結列表 * libapache2-mod-php7.1 * libphp7.1-embed * php7.1 * php7.1-bcmath * php7.1-bz2 * php7.1-cgi * php7.1-cli * php7.1-common * php7.1-curl * php7.1-dba * php7.1-dev * php7.1-enchant * php7.1-fpm * php7.1-gd * php7.1-gmp * php7.1-imap * php7.1-interbase * php7.1-intl * php7.1-json * php7.1-ldap * php7.1-mbstring * php7.1-mcrypt * php7.1-mysql * php7.1-odbc * php7.1-opcache * php7.1-pgsql * php7.1-phpdbg * php7.1-pspell * php7.1-readline * php7.1-recode * php7.1-snmp * php7.1-soap * php7.1-sqlite3 * php7.1-sybase * php7.1-tidy * php7.1-xml * php7.1-xmlrpc * php7.1-xsl * php7.1-zip 執行下面指令
就會產生下面的「Binary Package」連結列表 * libapache2-mod-php * libphp-embed * php * php-all-dev * php-bcmath * php-bz2 * php-cgi * php-cli * php-common * php-curl * php-dev * php-enchant * php-fpm * php-gd * php-gmp * php-imap * php-interbase * php-intl * php-json * php-ldap * php-mbstring * php-mcrypt * php-mysql * php-odbc * php-pgsql * php-phpdbg * php-pspell * php-readline * php-recode * php-snmp * php-soap * php-sqlite3 * php-sybase * php-tidy * php-xml * php-xmlrpc * php-zip ================================================================================ ## 安裝 ### 方式一
### 方式二
================================================================================ ## 相關討論 * #3 回覆: MP4檔案播放問題 ================================================================================ 以上提供參考 報告完畢 ![]() ================================================================================ [回到索引]
2018/2/22 13:48
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.