ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux .desktop 文件编写与实战排查:从入口到启动

Linux .desktop 文件编写与实战排查:从入口到启动 作为一名常年折腾 Linux 桌面的人我几乎每天都会和.desktop文件打交道。很多刚接触 Linux 的朋友都会遇到一个非常典型的问题明明从官网下载了一个软件压缩包解压后也能正常运行可桌面菜单里就是找不到它的图标每次启动都得去文件管理器里翻目录或者干脆开终端敲命令。这个问题的根源往往就是缺少一个桌面入口文件。Desktop Entry 文件简称.desktop文件是 Linux 桌面环境中用来描述应用程序元信息的标准配置文件。它定义了应用在菜单里的显示名称、图标、启动命令、所属分类等关键信息。无论你是普通用户想手动添加一个快捷方式还是开发者希望自己打包的应用能无缝出现在各大 Linux 发行版的菜单中掌握.desktop文件的编写规范都是绕不开的基本功。这篇文章我会从实际使用的角度出发把.desktop文件的每个关键字段讲透并通过一个完整的实操案例演示如何从零创建一个可在桌面环境和应用菜单中正常显示、启动的快捷方式。同时会整理我一路上踩过的坑和排查思路帮助大家少走弯路。1. 桌面入口文件到底在解决什么问题1.1 从一次真实经历说起为什么软件装上却找不到前阵子帮同事在 Ubuntu 上安装一个从官网下载的 Linux 版客户端压缩包解压后放在/opt目录下二进制文件一执行就能跑起来功能一切正常。但同事很快就抱怨每次都要打开终端输入一长串路径来启动实在太难受了。他问我说为什么 Windows 下装个软件就会有开始菜单快捷方式Linux 下面怎么没有这个问题也曾经困扰过我自己。Windows 生态里安装程序会自动把快捷方式写入开始菜单目录比如C:\ProgramData\Microsoft\Windows\Start Menu\Programs系统通过扫描这个目录来构建开始菜单列表。而 Linux 这边采用的是一个类似但更加开放和标准化的机制桌面环境会扫描特定的目录寻找以.desktop结尾的入口文件根据文件内容生成应用菜单项、桌面图标、甚至 Dock 栏上的固定图标。所以如果你下载的软件是一个绿色免安装包没有任何安装程序去帮你写.desktop文件那它自然就不会出现在菜单里。这类情况在从官网下载的二进制发行版中极其常见尤其是像 JetBrains 的 IDEA、一些国产软件客户端比如企业微信、希沃白板等它们在 Linux 下的分发包就常常只提供一个可执行文件要求你手动创建桌面入口。1.2 .desktop 文件的工作原理与系统约定.desktop文件的原理并不复杂它本质上是一个遵循特定格式的文本文件使用KeyValue形式来定义属性。桌面环境GNOME、KDE、XFCE、Deepin 等在启动时会扫描约定的目录解析这些文件然后把信息展示在用户界面上。系统约定俗成的目录主要有这几个/usr/share/applications/系统级应用菜单目录安装包通过 apt、dnf 等安装的应用通常把入口文件放这里所有用户可见。/usr/local/share/applications/本地系统管理员手动安装的应用一般也会放到这里。~/.local/share/applications/用户级目录只对当前用户生效不需要 root 权限即可写入。普通用户手动创建的桌面入口强烈建议放在这里。~/桌面/或~/Desktop/传统上放在这里的.desktop文件会显示为桌面图标需要文件管理器开启“允许启动”的信任选项才能直接双击运行。还有个容易忽略的细节很多主流桌面环境如 GNOME默认不再显示桌面图标但依然会把~/.local/share/applications/下的.desktop文件作为应用菜单的数据源。也就是说只要把.desktop文件丢进这个目录应用大概率就会出现在菜单搜索里。这个机制最大的好处是解耦了“软件的安装位置”和“菜单的展示方式”。哪怕你的软件主程序放在一个很冷门的路径只要有一个正确的.desktop文件指向它系统就认。这一点也是 Linux 下软件管理灵活性的体现之一。注意.desktop文件必须设置为“可执行”权限即权限位中包含x某些桌面环境才会认它。这一步很容易漏下文实操时会再次强调。2. 拆解 .desktop 文件的核心字段2.1 基础必填字段Type、Name、Exec 一个都不能少先看一个最简单但能正常工作的例子[Desktop Entry] TypeApplication NameMyApp Exec/opt/myapp/myapp Icon/opt/myapp/icon.png我们先逐行解释一下这些字段[Desktop Entry]分组头固定写法表示这是桌面入口文件的配置组。这行相当于告诉解析器下面这些属性都属于桌面入口的定义范围。Type必填项取值有三种。最常见的是Application表示这是一个应用程序Link表示这是一个指向文件或 URL 的链接Directory表示这是一个目录入口通常用于文件管理器中目录的自定义属性。我们平时写应用快捷方式用Application就行。Name必填项应用在菜单中显示的名称会直接显示在启动器里。支持多语言覆盖后面讲到国际化时会细说。Exec必填项启动应用时执行的命令。这条配置是整个文件的核心也是最容易出问题的地方。如果路径里有空格需要转义或用引号包裹如果命令需要带参数也在这里写好。Icon应用图标路径可以填绝对路径也可以填图标主题中的图标名不带.png或.svg后缀。填了绝对路径最稳妥因为不依赖图标主题的加载情况。只看这几个字段一个可用的菜单项就已经初具雏形了。把上述内容保存为/home/用户名/.local/share/applications/myapp.desktop并且执行chmod x赋予可执行权限刷新一下应用菜单就能看到 MyApp 的身影了。2.2 可选但实用的增强字段除了必填项.desktop文件还有一批可选的增强字段合理配置能大幅提升使用体验。我挑几个出场率最高的说明一下Comment对应用的简短描述在很多桌面环境里会作为搜索关键词的补充。比如你写 “A lightweight text editor”当你搜索 “editor” 的时候这个应用也可能会被搜出来。Categories应用所属分类用分号分隔。常见的分类有Development开发、Office办公、Graphics图形、Network网络、AudioVideo影音、System系统工具等。这个字段决定应用会出现在应用菜单的哪个子分类下。分类写错的话应用可能会被归入“其他”或其他奇怪的地方所以建议参照规范填写。Terminal布尔值true或false。如果应用是命令行程序设置成true后双击启动时会自动打开一个终端窗口运行它。StartupNotify布尔值设为true时鼠标点击图标后系统会显示“正在启动”的反馈防止用户因误以为没点中而重复点击。StartupWMClass设置窗口管理器识别的类名是为了让桌面环境正确把正在运行的窗口和对应的桌面图标关联起来。这个字段在固定 Dock 栏图标时尤为重要。如果设置不对Dock 栏上会出现两个相同的图标一个来自入口文件一个是运行中的窗口体验相当割裂。Actions定义右键菜单的附加操作比如“新建文档”“打开最近文件”等。这是进阶玩法后面专门展开。没有这些字段应用照样能跑但没有它们的话你的应用会在菜单里显得很“裸奔”甚至出现图标错乱、窗口和任务栏图标对不上等问题。配置规范一些受益的是后续每一次启动体验。2.3 多语言支持Name 字段可以不止一个.desktop文件对多语言的支持做得非常细致Name、Comment等字段可以通过添加语言后缀的方式提供多个翻译版本。NameMyApp Name[zh_CN]我的应用 Name[zh_TW]我的應用 Name[en_US]MyApp系统在解析文件时会根据当前系统的区域设置LANG或LC_MESSAGES环境变量自动选择对应语言的字段值。如果没有匹配的本地化字段就会回退到不带后缀的基础字段。有一点值得留意基础字段值最好保持英文因为它是所有语言环境的最终回退方案。有些朋友习惯直接把Name写成中文这在中文系统里看着没问题可一旦切换到英文环境菜单里就会显示中文名称显得很不协调。规范的做法是Name保留英文或不带区域信息的通用名称然后用Name[zh_CN]提供中文显示。除了名称Comment同样支持多语言后缀。对于面向国际用户分发的应用把这两个字段的多语言版本补全算是一个很基本的专业素养。3. 从零手写一个可用的 Desktop Entry 文件3.1 实操前想清楚的三件事动手写之前先回答三个问题可以极大减少后续返工第一应用的主程序可执行文件放在哪里。如果还没安装先安装好并记录完整的绝对路径比如/opt/someapp/someapp。不建议用相对路径因为.desktop文件可能从任意目录被启动相对路径很容易失效。第二是否依赖特定的环境变量或工作目录。有些应用要求启动时的工作目录必须是自己所在的目录否则会报找不到配置文件。遇到这种情况需要写一个启动脚本wrap 脚本来cd到目标目录再执行主程序然后在Exec中调用这个脚本。第三图标文件放在哪里。最省心的是把图标放在~/.local/share/icons/或/usr/share/icons/然后Icon字段直接写图标文件名不带路径。如果Icon写的是绝对路径要注意图标文件权限要可读否则同样不显示。3.2 完整案例让一个绿色软件出现在应用菜单里我以一次真实操作来演示目标是给一个存放于/opt/hello目录下的程序hello创建桌面入口原始可执行文件是/opt/hello/hello图标是/opt/hello/hello.png。第一步创建入口文件并写入内容mkdir -p ~/.local/share/applications vim ~/.local/share/applications/hello.desktop写入以下内容[Desktop Entry] TypeApplication NameHello Name[zh_CN]你好 CommentA demo application for desktop entry Comment[zh_CN]桌面入口文件示例应用 Exec/opt/hello/hello Icon/opt/hello/hello.png Terminalfalse CategoriesUtility; StartupNotifytrue这里我的Exec直接指向了主程序路径。程序本身不需要特殊的工作目录所以不需要 wrap 脚本。Terminalfalse表示这不是命令行程序。CategoriesUtility;告诉桌面环境它属于“实用工具”分类分号结尾是规范要求的。第二步赋予可执行权限chmod x ~/.local/share/applications/hello.desktop第三步刷新桌面环境的应用数据库。不同桌面环境刷新方式不一样主流的有# GNOME 桌面更新应用菜单缓存 update-desktop-database ~/.local/share/applications/ # KDE Plasma 一般会自动监测文件变化无需手动操作 # XFCE 有时需要注销重新登录才能生效GNOME 下按一下Super键打开活动总览输入 “Hello” 或者“你好”就能在搜索结果里看到这个应用了。整个过程看起来很简单但实际操作中触发的问题远比这个流程复杂比如点击图标没反应、菜单里根本看不到、图标不显示等这些我放在后面的排查章节里逐一说明。3.3 处理带参数或者需要环境变量的启动命令并不是所有应用都像我刚才示例的那样“一个绝对路径就行”。很多应用需要带参数或者依赖特定的环境变量。Exec字段虽然可以写完整命令但它有自己的解析规则和 Shell 里的命令解析不完全一样。Exec支持字段代码常见的有%u单个 URL%U多个 URL 列表%f单个文件名%F多个文件名列表%iIcon 字段的值%cName 字段的值这些代码主要用于文件关联场景。比如你双击一个.txt文件系统会找到处理该 MIME 类型的.desktop文件把文件路径作为参数替换进Exec。举个例子假设你的应用要打开文件可以这样写Exec/opt/hello/hello %U如果应用依赖环境变量且不方便修改系统级配置最佳实践是写一个启动脚本#!/bin/bash export HELLO_CONFIG_DIR/opt/hello/config export LD_LIBRARY_PATH/opt/hello/lib:$LD_LIBRARY_PATH exec /opt/hello/hello $然后把Exec改成指向这个脚本Exec/opt/hello/launch.sh脚本里的exec用得很关键它能把进程替换为应用主进程避免在系统里留下一个多余的 shell 父进程。这样的好处是后续更新应用时只需要改脚本不需要碰.desktop文件。而且环境变量只对该应用生效不会污染系统全局。注意Exec字段中不要使用~来代表家目录因为解析环境不保证会展开波浪号。尽量写绝对路径。4. 桌面入口文件的常见坑与排查思路4.1 为什么菜单里根本找不到应用应用菜单里看不到自己写的入口这是反馈最多的问题。按我的排查顺序一般从这几个方向逐一检查文件位置是否正确。确认是在~/.local/share/applications/或/usr/share/applications/而不是误放到了其他目录。文件扩展名是不是.desktop。有些编辑器的自动备份会生成hello.desktop~之类的文件系统只认.desktop结尾的。权限是否可执行。在终端里执行ls -l看一眼权限位如果权限是-rw-rw-r--那就不行需要chmod x。文件内容是否有效。可以用下面这个命令做一次快速校验desktop-file-validate ~/.local/share/applications/hello.desktop这个工具会提示缺少哪些必填字段、Exec格式是否有误等。多数发行版自带desktop-file-utils包如果没有先安装它。是否更新了应用数据库。执行一次update-desktop-database ~/.local/share/applications/后再看效果。如果以上全都没问题但菜单里还是没有极可能是桌面环境的 bug 或者缓存过旧。注销重新登录一次通常能解决。GNOME 下也可以试试按Alt F2输入r回车重启 Shell 而不需要注销。4.2 双击图标没反应但终端里运行正常这类问题几乎都出在Exec字段上。常见的情况有第一路径错误。建议检查Exec所写的路径是否真实存在有没有拼写错误。有时解压后的目录结构带上了版本号比如/opt/hello-1.2.0/hello写路径时一不留神就漏了版本号。第二路径中有特殊字符。路径里如果包含空格、%、引号等字符需要特殊处理。空格用引号包住整个命令行参数%需要转义为%%。这也是我建议把应用放到无空格的路径下的原因。第三依赖环境变量。如果应用在终端里能正常启动但在桌面环境下启动失败很可能是因为桌面环境不会加载你写在~/.bashrc或~/.profile里的环境变量。解决办法就是用一个 launch 脚本显式设置需要的环境变量后再执行主程序这和 3.3 节的做法一致。第四字段代码导致的乱解释。如果Exec里写了%开头的字符但不是系统定义的字段代码可能会被忽略或报错。比如写路径时用了%20表示空格系统并不会把它转成空格而是当作无效代码。4.3 图标不显示或者显示的是默认图标图标不显示通常有三个原因。一是Icon字段写的图标名在系统的图标主题里不存在。如果写的是绝对路径先确认路径对不对、文件格式是不是系统支持的png或svg。二是图标文件权限不够。尤其当图标放在/opt或其他系统目录下时如果其他用户没有读权限普通用户启动桌面刷新后就会显示空白。三是图标缓存问题。Linux 系统有图标缓存机制新加的图标不会立即生效。可以手动重建缓存sudo gtk-update-icon-cache /usr/share/icons/hicolor如果是放在用户目录的图标执行gtk-update-icon-cache ~/.local/share/icons/hicolor命令执行完再刷新一下桌面环境图标。如果还是不行试试注销重新登录这招对 GNOME 和 KDE 都管用。4.4 应用启动后任务栏出现两个相同图标这个问题我经常遇到尤其是自己打包应用时不时出现。现象是启动应用后Dock 或任务栏上出现了两个图标一个是你设置的快捷方式图标另一个是应用窗口自动生成的图标。原因在于桌面环境通过窗口的WMClass属性来判断它属于哪个.desktop文件。如果.desktop文件里没有设置StartupWMClass或者设置的值和窗口的实际WMClass不匹配系统就会把正在运行的窗口视为“未关联窗口”单独显示一个图标。解决方法也很直接先运行应用然后在终端里查看窗口的WMClassxprop WM_CLASS这时鼠标会变成一个十字准线点击正在运行的应用窗口终端里会输出类似下面的内容WM_CLASS(STRING) hello, Hello第一段是WM_CLASS的实例名第二段是类名。将这个值填到.desktop文件的StartupWMClass字段中StartupWMClasshello保存后重新加载应用菜单再启动应用两个图标就能合并了。注意不同桌面环境对这个字段的匹配策略不完全一样有些匹配实例名有些匹配类名如果填写后没有生效不妨把另一个也试试。4.5 文件管理器提示“不受信任的应用程序启动器”在桌面或文件管理器中双击.desktop文件时有些环境会弹出“不受信任”的提示拒绝直接执行。这不是文件内容的问题而是文件管理器把.desktop文件当作类似 Windows 快捷方式的可执行文件来处理出于安全考虑默认不允许“来自外部”的启动器直接运行。解决办法是在文件管理器里右键点击该文件选择“属性”或“允许启动”给文件打上“信任”标记。在 GNOME 的 Nautilus 文件管理器中如果桌面图标不生效可以直接在文件属性里勾选 “Allow executing file as program”。还有一种做法是彻底绕过这个限制也就是把.desktop文件放到~/.local/share/applications/这样它属于“已安装的应用入口”不再作为桌面上的普通文件对待。如果只是想让桌面显示快捷方式图标同时系统又允许启动可以在~/桌面和~/.local/share/applications/各放一份但记得要同步更新。4.6 在 Wayland 下需要留意的额外问题越来越多的 Linux 发行版默认使用 Wayland 而不是 X11这会带来一些传统 X11 环境下不存在的细节。比如在 Wayland 下xprop不再直接可用你需要改用xprop的 Wayland 替代或者直接在 GNOME 的扩展中查看窗口属性。另外StartupNotify机制在 Wayland 下实现方式有差异有些桌面环境的反馈效果可能不如 X11 下明显。这不算 bug但如果你在写.desktop文件时发现某些字段在 Wayland 下不生效可以先切换到 X11 试试以判断问题是否出在协议差异上。还有一点Wayland 下如果窗口通过 XWayland 运行WMClass依然可用如果是原生 Wayland 窗口部分桌面需要你显式设置StartupWMClass以便正确关联。我自己在 GNOME Wayland 下给一个基于 GTK 的应用写入口文件时就遇到过窗口关联不上的问题后来通过StartupWMClass解决了。4.7 常见问题速查表现象可能原因解决方案菜单里找不到应用文件位置不对、权限缺失、缓存未更新检查目录、加执行权限、运行update-desktop-database双击无反应Exec 路径错误、环境变量缺失、参数格式问题验证路径、使用 launch 脚本、检查字段代码图标不显示Icon 路径错误、图标主题未找到、缓存问题使用绝对路径、重建图标缓存任务栏双图标StartupWMClass 未设置或值不匹配用xprop查询后填写提示不受信任文件管理器安全策略右键允许启动或放入 applications 目录终端里能跑但快捷方式不行环境变量缺失或工作目录不对编写 wrap 脚本显式设置环境变量中文显示异常缺少对应语言的 Name 字段添加Name[zh_CN]字段5. 进阶玩法让 .desktop 文件更强大5.1 用 Actions 字段添加右键菜单操作.desktop文件完全可以被玩出花来。很多人在使用 VS Code、Firefox 这类应用时发现右键点击 Dock 栏图标能弹出“新建窗口”“新建私人窗口”等快捷操作这就是Actions字段的功劳。Actions的写法分为两步。第一步在[Desktop Entry]组里声明操作标识多个操作之间用分号分隔Actionsnew-window;new-private-window;第二步为每个操作单独定义一个以Desktop Action开头的组[Desktop Action new-window] Name新建窗口 Exec/opt/hello/hello --new-window [Desktop Action new-private-window] Name新建隐私窗口 Exec/opt/hello/hello --incognito这样配置之后右键点击应用图标就能看到这些操作菜单。对于你的自定义应用来说如果它支持命令行参数来控制启动模式用Actions可以极大提升使用的便捷性。有一点需要说明Actions里每个Name同样支持多语言后缀写法与主Name字段一致。5.2 通过 MimeType 让应用接管文件关联如果你开发或使用的是一个能够打开特定类型文件的应用可以通过MimeType字段声明它支持的文件类型这样在文件管理器中双击对应格式的文件时系统会优先推荐你的应用来处理。常见的 MIME 类型比如MimeTypetext/plain;text/markdown;application/json;需要注意两点第一MIME 类型之间用分号分隔且必须以分号结尾第二MimeType字段本身的生效还和系统 MIME 数据库的注册相关对于系统级安装的.desktop文件通常还要配合update-desktop-database和update-mime-database命令一起使用才能让文件管理器正确感知。为了更精确地关联也可以将自己自定义的 MIME 类型预先注册好然后再在.desktop文件里声明。这是独立应用和文件类型体系对接时比较正式的方案。5.3 拖放文件到图标上启动桌面环境下用户习惯将文件拖放到应用图标上打开。这个行为背后同样是%U、%f等字段代码在起作用。当你在Exec中写了%U文件管理器就会把拖放的文件路径列表替换进去。这里有一个容易忽略的细节如果应用只支持一次打开一个文件就应该用%f而不是%U。%U会传入所有拖放的文件%f只传第一个。命令行程序如果没考虑多文件参数收到一堆参数可能会直接报错或者只处理第一个。%f和%u的区别在于是否严格处理文件路径与 URL。多数情况下我们处理的都是本地文件%f和%u没有明显差异但如果应用要支持远程文件就需要用%u来传递 URL 形式因为%f传递的是本地文件路径远程文件可能无法解析。5.4 不同桌面环境的差异与兼容写法Linux 桌面环境百花齐放也带来了一些兼容性问题。同一个.desktop文件在 GNOME 下好好的放到 KDE 下可能就有细微差异。最典型的例子是Hidden字段。有些发行版为了隐藏预装软件的某个菜单项会在/usr/share/applications/对应的文件旁边放一个覆盖文件设置Hiddentrue。如果直接修改系统目录下的原始文件更新的时候可能会被覆盖正确的做法是在用户目录下放一个同名文件只需要写Hiddentrue即可覆盖系统级配置这利用了文件优先级机制。优先级顺序是~/.local/share/applications/下的同名文件优先级高于/usr/local/share/applications/再高于/usr/share/applications/。利用这个特性你可以不修改任何系统文件就能覆盖默认应用菜单项的名称、图标甚至是启动命令。另外桌面环境对桌面图标的支持程度不同XFCE 和 KDE 默认显示桌面图标GNOME 默认不显示。如果你需要“桌面快捷方式”效果需要先在桌面环境的设置里开启“允许桌面图标”选项。5.5 写一个自动生成 .desktop 文件的简单脚本日常使用中我经常需要为各种临时下载的绿色软件创建入口文件。与其每次都手动vim新建不如把生成过程写成一个简单脚本省时省力。下面是一个我常用的参考脚本核心思路是用函数封装创建入口的常规操作#!/bin/bash # 用法make-desktop.sh 应用名 执行路径 图标路径 [分类] NAME${1:?用法: $0 名称 执行路径 图标路径} EXEC${2:?缺少执行路径} ICON${3:-} CATEGORIES${4:-Utility;} DIR$HOME/.local/share/applications mkdir -p $DIR DESKTOP_FILE$DIR/$(echo $NAME | tr A-Z a-z | tr -).desktop cat $DESKTOP_FILE EOF [Desktop Entry] TypeApplication Name$NAME Exec$EXEC Icon$ICON Terminalfalse Categories$CATEGORIES StartupNotifytrue EOF chmod x $DESKTOP_FILE update-desktop-database $DIR 2/dev/null echo 已生成: $DESKTOP_FILE脚本的逻辑并不复杂入参依次为名称、执行路径、图标路径、分类生成对应的.desktop文件后赋予执行权限并刷新数据库。我在给解压版软件比如某些 IDE、建模工具、数据分析类客户端添加入口时经常用这个脚本稳定可靠。注意脚本中用引号处理了路径中的空格问题但是Exec里的空格参数依然需要额外转义这个脚本只适合不带参数的情况。如果参数复杂还是手动写好 wrap 脚本再执行。6. 最后再聊点实际的对于日常使用 Linux 桌面的人来说.desktop文件并不是需要背下来的知识点而更像是一个“查一次、用过一次就懂了”的工具。但在实际维护过程中稍微多花一点时间把字段规范化往往能减少后面非常多的隐性问题。我个人在选择Icon字段时尽量优先使用图标主题的名称而非绝对路径因为这样可以随系统主题自动切换风格。如果应用自带图标质量还不错并且固定放在某个目录下比如/opt/someapp/icon.png直接写绝对路径也没问题。两条路线都可行关键是保持统一。另外建议定期执行一次desktop-file-validate校验尤其是打算把自己写的.desktop文件提交到项目仓库或者打包发布之前。这个工具不仅能检查字段合法性还会对一些过时用法给出警告比如缺失Type、在旧版本中不支持的字段组合等。把校验结果清干净可以在很大程度上避免不同发行版上出现兼容性差异。说到不同发行版我也提醒一点如果你经常使用不同 Linux 发行版注意个别桌面环境的实现可能存在细微差异但核心的桌面入口规范在所有主流桌面环境中都是通用的这也是这套标准能跨发行版使用的原因。真的遇到某个环境特殊时用上一节提到的排查思路基本能覆盖大部分情况。希望这篇指南能帮助你彻底搞定.desktop文件不再为“装好了却找不到入口”这种事而烦恼。如果你在实操过程中碰上了本文没覆盖到的问题不妨翻一翻对应桌面环境的文档或者从最简单的三步排查法开始看权限、看路径、看缓存。
返回列表