前言我是来deepin做文件管理器项目开发的。4个月了,学习了一些linux的基础知识。这让我想起了linux下应用开发的一些优缺点。不足之处,暂且做个乱七八糟的总结,方便后面整理资料。这里的资料整理是基于freedesktop标准协议整理的一些知识点(基于deepin linux)。资料收集freedesktop标准应用图标主题管理图标主题管理是按照freedesktop标准构建的。不同主题的应用图标放在/user/share/icons目录下。当更换桌面环境的主题时,总是在这个目录下对应的找到应用程序图标。上图是我系统安装的主题目录,包括deepin、oxygen、hicolor、flattr...等。比如deepin主题的应用目录在/usr/share/icons/deepin/apps。该目录中还有不同大小的图标集,以提供不同需求的图标。一般尺寸有12、24、48、56、128、256,可缩放。不同题材的厂商做出不同的题材。当然,我们在读取主题的时候,并不是直接按照这个目录结构来读取的。主题的根目录统一在/usr/share/icons,然后往下就是不同主题对应的目录。我们通过index.theme配置文件来查找所需大小类型的图标。index.theme[IconTheme]Name=deepinComment=deepinInherits的默认图标主题Inherits=flattrExample=x-directory-normalDirectories=actions/scalable,actions/22,actions/24,apps/48,apps/128,apps/scalable,devices/可扩展,设备/48,地点/22,地点/24,地点/32,地点/48,地点/64,地点/128,地点/可扩展,状态/可扩展,状态/48,mimetypes/22,mimetypes/24,mimetypes/32,mimetypes/48,mimetypes/64,mimetypes/128,mimetypes/scalable[actions/scalable]Size=96Context=ActionsType=ScalableMinSize=16MaxSize=96[actions/22]Size=22Context=ActionsType=Fixed[动作/24]Size=24Context=ActionsType=Fixed[apps/48]Size=48Context=ApplicationsType=Fixed[apps/128]Size=128Context=ApplicationsType=Fixed[apps/scalable]Size=128Context=ApplicationsType=ScalableMinSize=16MaxSize=512[标志/12]大小=12上下文=标志类型=固定[标志/22]大小=22上下文=标志类型=固定[标志/24]大小=24上下文=标志类型=固定[标志/32]大小=32上下文=标志类型=固定[标志/48]Size=48Context=EmblemsType=Fixed[emblems/scalable]Size=96Context=EmblemsType=ScalableMinSize=16MaxSize=128[devices/scalable]Size=256Context=DevicesType=ScalableMinSize=16MaxSize=256[devices/48]Size=48Context=DevicesType=Fixed[emblems/]可缩放]Size=24Context=EmblemType=Fixed[mimetypes/22]Size=22Context=MimeTypesType=Fixed[mimetypes/24]Size=24Context=MimeTypesType=Fixed[mimetypes/32]Size=32Context=MimeTypesType=Fixed[mimetypes/48]Size=48Context=MimeTypesType=Fixed[mimetypes/64]Size=64Context=MimeTypesType=Fixed[mimetypes/128]Size=128Context=MimeTypesType=Fixed[mimetypes/scalable]Size=512Context=MimeTypesType=ScalableMinSize=16MaxSize=512[地方/22]Size=22Context=PlacesType=Fixed[places/24]Size=24Context=PlacesType=Fixed[places/32]Size=32Context=PlacesType=Fixed[places/48]Size=48Context=PlacesType=Fixed[places/64]Size=64Context=PlacesType=Fixed[places/128]Size=128Context=PlacesType=Fixed[places/scalable]Size=256Context=PlacesType=ScalableMinSize=16MaxSize=256[status/48]Size=48Context=StatusType=Fixed[status/scalable]Size=96Context=StatusType=ScalableMinSize=16MaxSize=96.desktop文件桌面文件是一个简单的应用配置文本,我们可以直接打开二进制文件,也可以可以通过这个配置文件打开这个配置文件。这个配置文件的作用是直接读取这个配置来管理桌面环境的应用程序,这样就不用直接找二进制文件了。Linux中放置桌面文件的目录很乱。各大桌面环境或应用程序都有自己的套路,并不严格遵守freedesktop标准。http://usr/share/applications//usr/local/share/applications//usr/share/gnome/applications/~/.local/share/applicationsgoogle-drive。桌面[桌面入口]Version=1.0Type=ApplicationExec=/usr/bin/dde-file-manager%uIcon=dde-file-managerStartupNotify=trueTerminal=falseCategories=Utility;OnlyShowIn=Deepin;Actions=new-window;MimeType=inode/directory;Name=DeepinFileManagerName[ar]=???????????Name[ast]=XestordeFicherosName[bg]=文件管理器名称[bn]=??????????[???Name[ca]=GestorsdefitxubersName][castordefitxubersName][castordefitxubersName]ingde]=DateiverwaltungName[el]=Διαχειριστ??αρχε?ωνName[en_AU]=DeepinFileManagerName[en_GB]=DeepinFileManagerName[es]=AdministradordearchivosName[et]=FailihaldurName[eu]=FittonxategikudatzaileaName[fiintaName]=Tiedafr]=GestionnairedefichiersName[gl]=XestordeficheirosName[he]=?????????Name[hr]=UpraviteljdatotekaName[hu]=Fájlkezel?Name[id]=ManajerBerkasName[is]=SkráastjóriName[i]t]=GestoredeifileName[ja]=文件管理器名称[kk]=Fáildart?v?t????ysiName[ko]=Fail?pr?v?ttuv?Name[lt]=Fail?pr?v?ttuv?Name[lv]=Failapr?v?t?tName[ms]=PengurusFailName[nb]=FilbehandlerName[nl]=StockBehaviorName[nn]=FileHandlerName[oc]=FileManagerName[pa]=FileManagerName[pl]=FileManagerName[pt]=FileManagerName[pt_BR]=FileManagerName[fi[ro]=Managerru]=ФайловыйменеджерName[sk]=SprávcafileName[sl]=UpravljavlnikfileName[sr]=УправникfileName[sv]=FilhanterareName[te]=FileManagerName[th]=ProgramManagerFileName[tr]=DosyaY?neticisiName[ug]=FileManagerName[uk]=FáiloviyменеджерName[vi]=Trình???cly??ngtinName[zh_CN]=个人档案管理员姓名[zh_HK]=个人档案管理员姓名[zh_TW]=个人档案管理员Comment=浏览文件系统]=filesystemUpComdatement[arsystemfileComment[ast]=恢复文件系统Comment[bg]=恢复文件系统Comment[bn]=浏览文件系统Comment[ca]=浏览修复程序system]=Commentcházetsystemsoubor?Comment[da]=GennemsefilsystemetComment[de]=DasDateisystemdurchsuchen,umeineneigenenBefehlzuw?hlenComment[el]=Περιηγηθε?τεστοαρχε?οσυστ?ματο?Comment[en_AU]=B[评论文件系统]=B[浏览文件]=浏览文件系统Comment[et]=ServifailisüsteemiComment[eu]=ArkatufitxategisystemComment[fi]=如果你有一个Comment[fr]=浏览文件系统Comment[gl]=检查文件系统Comment[he]=检查文件系统Comment[he]=检查文件系统Comment[hr]=问题日期subtavComment[hu]=三个错误Comment[id]=系统持有burkasComment[is]=FlackandfinecrackersComment[it]=共享文件系统Comment[ja]=共享fileComment[k]=Publisherжяйен?шолуComment[ko]=系统故障Comment[lt]=系统故障Comment[ms]=系统层failComment[nb]=Bla通过文件系统Comment[nl]=通过文件系统Comment[合成]名称[oc]=PercorrerlosistemadefichièrsComment[pa]=浏览器文件系统Comment[pl]=查看系统文件并管理其内容ru]=浏览文件系统Comment[sk]=浏览文件系统Comment[sl]=浏览文件系统Comment[sr]=浏览文件系统Comment[te]=浏览文件系统Comment[tr]=浏览文件系统Comment[ug]=浏览文件系统Comment[uk]=浏览文件系统Comment[vi]=浏览文件系统zh_TW]=浏览档案系统[DesktopActionnew-window]Name=NewWindowName[bg]=НовпрозорецииName[ca]=FinestranovaName[cs]=NovéoknoName[da]=NytvindueName[de]=NeuesFensterName[el]=N?ονεταν?Name[es]=VentananuevaName[eu]=LeihoberriaName[fa]=VentananuevaName[fi]=UusiikkunaName[fr]=NewwindowName[fur]=Gn?fboatName[gd]=UinneagùrName[gl]=NewxanelaName[he]=NewwindowName[hu]=újablakName[it]=NewfinestraName[ja]=NewfinestraName[kk.Name[kk]=ЖаятерезеName[ko]=??Name[lt]=SmalltonguesName[lv]=YellowlogsName[nb]=NewwindowName[nl]=NewleftName[oc]=NewwindowName[pl]=NowoknoName[pt]=NovajanelaName[pt_BR]=NovajanelaName[ru]=СоздатьокноName[sk]=NovéoknoName[sr]=НовипрозорName[sr@latin]=NoviprozorName[sv]=Nyttf?nsterName[th]=????????Name[tr]Exec=dde-file-manager--new-window[DesktopEntry]ApplicationVersionVersionType Type(一般是Application)Exec执行命令(shell会执行的命令)IconApplication图标(一般是主题应用name,绝对路径)MimeType支持打开文件的格式Actions 右键菜单显示项看到上面的文件内容示例,我们发现DesktopFiles可以灵活的用于应用程序信息的收集和处理,甚至国际化的应用程序。各种文件格式的默认启动程序也很奇怪,是Linux下的默认启动程序。不同的发布版本有自己的套路。作为文件管理器工作时,您必须处理各种兼容性问题大多数默认启动程序的配置文件:/.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[DefaultApplications]application\octet-stream=FoxitReader.desktopapplication\pdf=FoxitReader.desktopapplication\ppdf=FoxitReader.desktoptext\html=google-chrome.desktoptext\plain=/usr/share/applications/sublime_text.desktopx-scheme-handler\about=google-chrome.desktopx-scheme-handler\http=google-chrome.desktopx-scheme-handler\https=google-chrome.desktopx-scheme-handler\unknown=google-chrome.desktopapplication/pdf=FoxitReader.desktopapplication/ppdf=FoxitReader.desktopapplication/octet-stream=FoxitReader.desktop有了这些基本概念,我们就可以在Linux下做简单的桌面系统开发了,比如启动Server,桌面,文件管理器,dockerbar等等。当然,真正的开发,每天都难免要踩新的坑,只能慢慢来。
