來了deepin作文件管理器項目開發,已經有了4個月時間了,學了些許linux基礎知識,這個讓我聯想到linux下作應用開發的一些優勢和缺點,先暫時作個凌亂的總結,以便後期整理資料。這裏的資料整理都基於freedesktop標準協議來進行一些知識點整理(基於deepin linux)。html
freedesktop標準node
圖標主題管理是遵循freedesktop標準來構建的,不一樣主題的應用圖標都放在/user/share/icons目錄下,在桌面環境要換一個主題的時候都是在這個目錄下對應找到應用圖標的。linux
上圖是個人系統裏邊安裝的主題目錄,分別有deepin, oxygen, hicolor, flattr...等等。好比deepin主題的應用程序目錄就是在/usr/share/icons/deepin/apps。chrome
這個目錄裏邊還有不一樣尺寸的圖標集,供給不一樣需求來獲取圖標,尺寸通常會有12,24,48,56,128,256,scalable,不一樣主題的廠商作的都不盡相同。固然咱們讀主題的時候還不是直接按着這個目錄結構讀的,主題根目錄統一在/usr/share/icons,而後就是對應這不一樣的主題的目錄下去了,咱們是經過度index.theme這個配置文件來找到須要尺寸類型的圖標。docker
index.themeshell
[Icon Theme] Name=deepin Comment=Default icon theme for deepin Inherits=flattr Example=x-directory-normal Directories=actions/scalable,actions/22,actions/24,apps/48,apps/128,apps/scalable,devices/scalable,devices/48,places/22,places/24,places/32,places/48,places/64,places/128,places/scalable,status/scalable,status/48,mimetypes/22,mimetypes/24,mimetypes/32,mimetypes/48,mimetypes/64,mimetypes/128,mimetypes/scalable [actions/scalable] Size=96 Context=Actions Type=Scalable MinSize=16 MaxSize=96 [actions/22] Size=22 Context=Actions Type=Fixed [actions/24] Size=24 Context=Actions Type=Fixed [apps/48] Size=48 Context=Applications Type=Fixed [apps/128] Size=128 Context=Applications Type=Fixed [apps/scalable] Size=128 Context=Applications Type=Scalable MinSize=16 MaxSize=512 [emblems/12] Size=12 Context=Emblems Type=Fixed [emblems/22] Size=22 Context=Emblems Type=Fixed [emblems/24] Size=24 Context=Emblems Type=Fixed [emblems/32] Size=32 Context=Emblems Type=Fixed [emblems/48] Size=48 Context=Emblems Type=Fixed [emblems/scalable] Size=96 Context=Emblems Type=Scalable MinSize=16 MaxSize=128 [devices/scalable] Size=256 Context=Devices Type=Scalable MinSize=16 MaxSize=256 [devices/48] Size=48 Context=Devices Type=Fixed [emblems/scalable] Size=24 Context=Emblems Type=Fixed [mimetypes/22] Size=22 Context=MimeTypes Type=Fixed [mimetypes/24] Size=24 Context=MimeTypes Type=Fixed [mimetypes/32] Size=32 Context=MimeTypes Type=Fixed [mimetypes/48] Size=48 Context=MimeTypes Type=Fixed [mimetypes/64] Size=64 Context=MimeTypes Type=Fixed [mimetypes/128] Size=128 Context=MimeTypes Type=Fixed [mimetypes/scalable] Size=512 Context=MimeTypes Type=Scalable MinSize=16 MaxSize=512 [places/22] Size=22 Context=Places Type=Fixed [places/24] Size=24 Context=Places Type=Fixed [places/32] Size=32 Context=Places Type=Fixed [places/48] Size=48 Context=Places Type=Fixed [places/64] Size=64 Context=Places Type=Fixed [places/128] Size=128 Context=Places Type=Fixed [places/scalable] Size=256 Context=Places Type=Scalable MinSize=16 MaxSize=256 [status/48] Size=48 Context=Status Type=Fixed [status/scalable] Size=96 Context=Status Type=Scalable MinSize=16 MaxSize=96
desktop文件是一個簡單的應用程序配置文本,咱們平時能夠直接打開二進制文件,同時也能夠經過這個配置文件進行打開。這個配置文件的做用是在桌面環境中,直接讀這個配置來管理應用,這樣就不用直接找二進制文件了。desktop文件在linux下放的目錄我的感受好亂,各大桌面環境或者應用都有本身的套路,並不會嚴格遵照freedesktop標準。我總結的desktop文件通常就在如下目錄中能找到:app
/usr/share/applications/ui
/usr/local/share/applications/google
/usr/share/gnome/applications/spa
~/.local/share/applications
google-drive.desktop
[Desktop Entry] Version=1.0 Type=Application Exec=/usr/bin/dde-file-manager %u Icon=dde-file-manager StartupNotify=true Terminal=false Categories=Utility; OnlyShowIn=Deepin; Actions=new-window; MimeType=inode/directory; Name=Deepin File Manager Name[ar]=مدير الملفات Name[ast]=Xestor de Ficheros Name[bg]=Файлов мениджър Name[bn]=ফাইল ম্যানেজার Name[ca]=Gestor de fitxers Name[cs]=Správce souborů Name[da]=Filhåndtering Name[de]=Dateiverwaltung Name[el]=Διαχειριστής αρχείων Name[en_AU]=Deepin File Manager Name[en_GB]=Deepin File Manager Name[es]=Administrador de archivos Name[et]=Failihaldur Name[eu]=Fitxategi kudeatzailea Name[fi]=Tiedostonhallinta Name[fr]=Gestionnaire de fichiers Name[gl]=Xestor de ficheiros Name[he]=מנהל קבצים Name[hr]=Upravitelj datoteka Name[hu]=Fájlkezelő Name[id]=Manajer Berkas Name[is]=Skráastjóri Name[it]=Gestore dei file Name[ja]=ファイルマネージャー Name[kk]=Файлдар басқарушысы Name[ko]=파일 관리자 Name[lt]=Failų tvarkytuvė Name[lv]=Faila pārvaldnieks Name[ms]=Pengurus Fail Name[nb]=Filbehandler Name[nl]=Bestandbeheerder Name[nn]=Filhandsamar Name[oc]=Gestionari de fichièrs Name[pa]=ਫਾਇਲ ਮੈਨੇਜਰ Name[pl]=Menedżer plików Name[pt]=Gestor de ficheiros Name[pt_BR]=Gerenciador de arquivos Name[ro]=Manager de fișiere Name[ru]=Файловый менеджер Name[sk]=Správca súborov Name[sl]=Upravljalnik datotek Name[sr]=Управник датотека Name[sv]=Filhanterare Name[te]=దస్త్ర నిర్వాహకం Name[th]=โปรแกรมจัดการแฟ้ม Name[tr]=Dosya Yöneticisi Name[ug]=ھۆججەت باشقۇرغۇ Name[uk]=Файловий менеджер Name[vi]=Trình quản lý tệp tin Name[zh_CN]=深度文件管理器 Name[zh_HK]=深度檔案管理員 Name[zh_TW]=深度檔案管理員 Comment=Browse the file system Comment[ar]=تصفح ملف النظام Comment[ast]=Restola pel sistema de ficheros Comment[bg]=Преглед на файловата система Comment[bn]=ফাইল সিস্টেম ব্রাউজ করুন Comment[ca]=Navega el sistema de fitxers Comment[cs]=Procházet systém souborů Comment[da]=Gennemse filsystemet Comment[de]=Das Dateisystem durchsuchen, um einen eigenen Befehl zu wählen Comment[el]=Περιηγηθείτε στο αρχείο συστήματος Comment[en_AU]=Browse the file system Comment[en_GB]=Browse the file system Comment[es]=Navegar por el sistema de archivos Comment[et]=Sirvi failisüsteemi Comment[eu]=Arakatu fitxategi sistema Comment[fi]=Selaa tiedostojärjestelmää Comment[fr]=Parcourir le système de fichiers Comment[gl]=Examinar o sistema de ficheiros Comment[he]=עיון במערכת הקבצים Comment[hr]=Pregledaj datotečni sustav Comment[hu]=Fájlrendszer tallózása Comment[id]=Ramban sistem berkas Comment[is]=Flakka í skráakerfinu Comment[it]=Sfoglia il file system Comment[ja]=ファイルシステムを參照します Comment[kk]=Файлдық жүйені шолу Comment[ko]=파일 시스템 탐색 Comment[lt]=Naršyti failų sistemą Comment[ms]=Layar sistem fail Comment[nb]=Bla gjennom filsystemet Comment[nl]=Blader door het bestandssysteem Comment[nn]=Bla gjennom filsystemet Comment[oc]=Percórrer lo sistèma de fichièrs Comment[pa]=ਫਾਇਲ ਸਿਸਟਮ ਬਰਾਊਜ਼ਰ ਕਰੋ Comment[pl]=Przegląda system plików i zarządza jego zawartością Comment[pt]=Explorar sistema de ficheiros Comment[pt_BR]=Navegar pelo sistema de arquivos Comment[ro]=Gestionați fișierele din sistem Comment[ru]=Просмотреть файловую систему Comment[sk]=Prehliadať systém súborov Comment[sl]=Brskajte po datotečnem sistemu Comment[sr]=Разгледајте систем датотека Comment[sv]=Bläddra i filsystemet Comment[te]=దస్త్ర వ్యవస్థను విహరించు Comment[th]=ท่องดูระบบแฟ้ม Comment[tr]=Dosya sistemini tara. Comment[ug]=ھۆججەت سىستېمىسىنى كۆرىدۇ Comment[uk]=Оглянути файлову систему Comment[vi]=Duyệt hệ thống tệp tin Comment[zh_CN]=瀏覽文件系統 Comment[zh_HK]=瀏覽檔案系統 Comment[zh_TW]=瀏覽檔案系統 [Desktop Action new-window] Name=New Window Name[bg]=Нов прозорец Name[ca]=Finestra nova Name[cs]=Nové okno Name[da]=Nyt vindue Name[de]=Neues Fenster Name[el]=Νέο παράθυρο Name[es]=Ventana nueva Name[eu]=Leiho berria Name[fa]=پنجره نو Name[fi]=Uusi ikkuna Name[fr]=Nouvelle fenêtre Name[fur]=Gnûf barcon Name[gd]=Uinneag ùr Name[gl]=Nova xanela Name[he]=חלון חדש Name[hu]=Új ablak Name[it]=Nuova finestra Name[ja]=新しいウィンドウ Name[kk]=Жаңа терезе Name[ko]=새 창 Name[lt]=Naujas langas Name[lv]=Jauns logs Name[nb]=Nytt vindu Name[nl]=Nieuw venster Name[oc]=Fenèstra novèla Name[pl]=Nowe okno Name[pt]=Nova janela Name[pt_BR]=Nova janela Name[ru]=Создать окно Name[sk]=Nové okno Name[sr]=Нови прозор Name[sr@latin]=Novi prozor Name[sv]=Nytt fönster Name[th]=หน้าต่างใหม่ Name[tr]=Yeni Pencere Name[uk]=Нове вікно Name[zh_CN]=新建窗口 Name[zh_TW]=新增視窗 Exec=dde-file-manager --new-window
[Desktop Entry]
Version 應用版本
Type 類型(通常爲Application)
Exec 執行命令(shell 會執行的命令)
Icon 應用圖標(通常爲主題應用名字,絕對路徑)
MimeType 支持打開文件的格式
Actions 右鍵菜單顯示項
看到上面的文件內容例子,咱們發現desktop文件能夠很靈活作應用信息採集處理,甚至作應用程序的國際化顯示
linux下作默認啓動程序也是很奇葩的,不一樣發行版本都md有他們的本身套路,搞到作文件管理器時候,要作各類兼容性問題。絕大大部分默認啓動程序的配置文件:
/.config/mimeapps.list /.local/share/applications/mimeapps.list /.local/share/applications/defaults.list /.local/share/applications/mimeinfo.cache /usr/local/share/applications/mimeapps.list /usr/local/share/applications/defaults.list /usr/local/share/applications/mimeinfo.cache /usr/share/applications/mimeapps.list /usr/share/applications/defaults.list /usr/share/applications/mimeinfo.cache
鴨個蛋蛋,就是這麼奇葩,作linux默認程序兼容就是做死。固然這是沒辦法,誰叫我是作linux開發的,先啃一波了呵呵。下面是一個默認程序的配置內容
..list ...cache
[Default Applications] application\octet-stream=FoxitReader.desktop application\pdf=FoxitReader.desktop application\ppdf=FoxitReader.desktop text\html=google-chrome.desktop text\plain=/usr/share/applications/sublime_text.desktop x-scheme-handler\about=google-chrome.desktop x-scheme-handler\http=google-chrome.desktop x-scheme-handler\https=google-chrome.desktop x-scheme-handler\unknown=google-chrome.desktop application/pdf=FoxitReader.desktop application/ppdf=FoxitReader.desktop application/octet-stream=FoxitReader.desktop
有了這些基礎概念咱們就能夠在linux下作簡單的桌面系統開發了,好比啓動器,桌面,文件管理器,docker欄等等,固然真正作開發的時候,每天踩新坑是必然事情,只能慢慢磨合着作了。