.desktop文件中exec字段备忘

博客主要围绕Linux中exec的使用展开。exec后需跟可执行程序名,带入变量时格式有要求,加引号也无法在开始菜单位置显示图标。还介绍了exec后变量的传入方式,以及开始菜单图标默认位置,最后提及送两个变量到exec的测试情况。
  1. exec 后面必须跟可执行程序名,要么全路径,要么在PATH里面能找到,如果要带入变量必须 LD_LIBRARY_PATH=/XXX/ /bin/vi 这种格式不行必须要加引号全部括起来,如果不括起来是不会在开始菜单位置显示图标的。
    其实引号括起来也不行的,一样不会显示,正确的做法是是
Exec=env APPMENU_DISPLAY_BOTH=1 digikam -caption "%c" %i

或者

Exec=sh -c "myprogram --folder\=\$HOME/.special"
  1. exec 后面的%u 这一类变量,是在其他地方调用这个.desktop程序来启动的时候传进来的,比如文件管理器选中文件打开,会调用某个对应mime类型的.desktop的程序来打开。而不是说在鼠标双击的时候穿参数,直接双击也没法传参数。
  2. 开始菜单的图标默认位置/usr/share/applications ~/.local/share/applications/ 这两个目录

20201-12-30 更新

今天遇到要送两个变量到exec里面的情况,测试了一下,加空格跟后面就行了。但是命令行里面不能带变量,变量不认。

<think>好的,我现在需要帮用户解决如何在.desktop文件中将Exec字段设置为相对路径的问题。用户之前已经询问过关于动态路径的设置,现在他们想了解相对路径的具体方法。首先,我需要回顾之前的对话,确保这次回答一致且不重复。 根据用户提供的引用内容,特别是引用[1],其中提到了Exec字段和Terminal的使用,以及通过脚本或环境变量处理路径。用户现在的问题更具体,是关于相对路径的设置。而.desktop文件默认不支持相对路径,所以需要找到替代方法。 首先,我需要确认用户的需求:他们希望Exec的路径相对于.desktop文件的位置,而不是绝对路径。常见的情况可能是用户将应用程序和.desktop文件放在同一目录,或者有特定的目录结构,希望便于移动整个文件夹而不必修改路径。 接下来,我要考虑可能的解决方案。根据之前的知识,使用环境变量或者包装脚本是常见的方法。例如,用户可以使用bash -c来执行相对路径的命令,或者在脚本中处理路径转换。另外,通过设置工作目录(Path)也是一个可能的方向,但需要确认是否有效。 然后,我需要检查用户提供的引用是否有帮助。引用[1]中的代码片段显示,当执行.desktop文件时,如果类型是Application,会调用相关函数执行命令。这可能意味着Exec字段中的命令会被shell处理,但需要显式调用shell来解析相对路径。 可能的步骤包括: 1. 使用bash -c来解析相对路径,例如:Exec=/bin/bash -c 'cd /path/to/dir && ./app'。但需要将路径转换为相对于.desktop文件的位置,可能需要获取.desktop文件的所在目录。 2. 编写一个包装脚本,自动检测.desktop文件的位置,并据此设置应用程序的路径。例如,在脚本中使用dirname "$0"获取脚本所在目录,然后拼接相对路径。 3..desktop文件中设置Path字段为相对路径,但需要测试是否支持。根据标准,Path字段是工作目录,但可能不支持相对路径,需要绝对路径。 然后,我需要验证这些方法的可行性。例如,测试使用bash -c是否能正确解析相对路径,或者脚本是否能正确获取到.desktop文件的位置。需要注意的是,不同的桌面环境可能处理方式不同,因此需要通用性较好的方法。 另外,用户可能希望移动整个应用程序和.desktop文件而不修改路径,因此相对路径的设置至关重要。需要确保解决方案在不同环境下都能生效,例如当.desktop文件被移动到其他位置时,相对路径依然有效。 最后,需要总结这些方法,给出具体的示例,并提醒用户注意事项,比如权限问题、桌面环境的差异等。同时,生成相关问题,帮助用户进一步解决可能遇到的困难,比如图标不显示或传递参数的问题。</think>在`.desktop`文件中直接使用相对路径会因**桌面环境执行上下文限制**而失效,但可通过以下方法实现等效需求: --- ### 一、通过脚本解析相对路径(推荐) #### 1. 创建包装脚本 在`.desktop`文件同级目录下创建启动脚本(如`launcher.sh`),通过`dirname "$0"`获取脚本所在目录,再拼接相对路径: ```bash #!/bin/bash # 获取.desktop文件所在目录 DESKTOP_DIR=$(dirname "$(readlink -f "$0")") # 拼接相对路径并执行应用 exec "$DESKTOP_DIR/../bin/your_app" ``` #### 2. 配置.desktop文件 ```ini [Desktop Entry] Exec=/path/to/launcher.sh Icon=icon.png Type=Application ``` - **关键点**: - 脚本需与`.desktop`文件保持相对位置固定 - 必须赋予脚本可执行权限:`chmod +x launcher.sh` - 图标路径也可用相对路径(需与.desktop文件同级)[^1] --- ### 二、使用环境变量动态构建路径 通过`%k`占位符获取.desktop文件路径(仅部分桌面环境支持): ```ini [Desktop Entry] Exec=sh -c 'APPDIR=$(dirname "%k") && "$APPDIR/../bin/your_app"' Type=Application ``` - **兼容性**: - `%k`在GNOME中返回.desktop文件路径,但KDE中可能返回空值[^2] - 需测试目标桌面环境支持性 --- ### 三、伪相对路径+工作目录设置 通过`Path`字段指定工作目录,结合相对路径执行: ```ini [Desktop Entry] Exec=./your_app Path=/absolute/path/to/app_dir Type=Application ``` - **限制**: - `Path`字段必须使用绝对路径 - 仅当应用需特定工作目录时有效 --- ### 四、标准化部署方案 通过`AppImage`或`Flatpak`打包应用,自动处理路径依赖: ```ini [Desktop Entry] Exec=your_app.AppImage Type=Application ``` - **优势**: - 单文件部署 - 路径完全自包含 --- ### 调试要点 1. **终端输出调试**:临时添加`Terminal=true`查看执行错误 2. **路径验证**:在脚本中使用`echo "Current dir: $(pwd)" > log.txt`记录执行路径 3. **桌面环境兼容性测试**:GNOME/KDE/Xfce对相对路径支持存在差异[^2] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值