桌面快捷方式.desktop运行的相对路径问题

sh/bash/dash/ksh/zsh等Shell脚本
txmsuper
帖子: 11
注册时间: 2009-03-06 19:27

Re: 桌面快捷方式.desktop运行的相对路径问题

#16

帖子 txmsuper » 2023-01-17 15:44

astolia 写了: 2023-01-17 12:47
txmsuper 写了: 2023-01-16 9:31 我这里有疑问的是双击运行.desktop文件时,ubuntu的处理过程,因为从结果上看,双击.desktop这个动作执行的根目录好像是在用户根目录“/home/[userid]”,而非“/home/[userid]/Desktop”。我又做了个测试,将test.desktop文件复制到/usr/share/applications下,从启动器执行,得到的上级目录结果依然是/home。这看似是跟.desktop文件的执行动作有关,是否gnome执行所有的.desktop文件,都会将工作目录置为~?
我上面第二段写的你都没看是不是?.desktop文件只是一个纯文本配置文件,并不是一个linux原生支持的可执行文件。你看到的双击它就有一个程序启动,并不是它自身去运行的,而是其他的某个程序去解析了它的内容,再去运行的。你首先需要弄清楚的就是这某个程序到底是哪个。这个很容易查到,就写在进程的parent pid即ppid里。gnome的系统监视器没把ppid列出来,但可以在设置里选择显示依赖关系,就可以以树状结构显示进程的父子关系了。再通过/proc/进程ID/cwd,就能知道到底是哪一级的进程更改了工作目录
txmsuper 写了: 2023-01-16 9:31 再次感谢版主回复,受宠若惊,如果可以的话,版主能否指点一下.desktop文件执行方面的知识?.desktop文件能否通过编写参数改变执行的根目录?
有规范在 https://specifications.freedesktop.org/ ... ec/latest/
规范中有明确规定可以通过Path来指明工作目录 https://specifications.freedesktop.org/ ... 01s06.html
不过如果你设的是个相对路径,负责解析执行它的程序一般仍然会是相对于自己的工作目录来设定,而不是.desktop文件所在的目录。
一般的做法就是4楼所说的,在.desktop文件里执行一个中间脚本而非最终程序,在中间脚本中通过dirname $0来获取脚本所在的目录,再以此为基准切换到最终程序的目录来执行。这样就不用去管运行环境的工作目录的事了
再次感谢老师~问题已解决,.desktop可以用Path参数配置工作目录,学到了,开心 :Haha
更深入的运行过程对于我这样的菜鸟,要完全理解的话还需要很长的路要走啊 :Faint
回复