Linux Mint 21 Cinnamon菜单启动器相关命令及Emacs实际启动路径的技术咨询
嘿,我来帮你理清这个问题!问题的核心在于:桌面环境(这里是Cinnamon)启动程序时使用的环境变量(尤其是PATH),和你在终端里使用的可能不一样,所以菜单启动器调用的Emacs路径才会和which/type给出的结果不一致。
下面给你几个实用的方法,能帮你找到菜单启动器实际调用的Emacs路径:
1. 查看Emacs的桌面启动配置文件
Cinnamon菜单里的程序都是通过.desktop配置文件定义的,你可以先找到对应的文件:
find /usr/share/applications ~/.local/share/applications -name "*emacs*.desktop"
找到文件路径后,用cat命令查看它的内容,重点看Exec字段——这个字段就是启动器实际执行的命令。比如:
cat /usr/share/applications/emacs.desktop
如果Exec行是Exec=emacs %F,那它会用桌面环境PATH里第一个匹配的emacs;如果是绝对路径,那直接就是那个路径了。
2. 查看桌面环境的PATH环境变量
终端里的PATH和桌面启动时的PATH可能不同,你可以用这个命令查看Cinnamon会话的PATH:
systemctl --user show-environment | grep PATH
对比这个输出和终端里echo $PATH的结果,就能明白为什么菜单启动的是另一个emacs了——大概率是/usr/local/bin在桌面的PATH里位置靠后,甚至没被包含。
3. 直接查看运行中的Emacs进程路径
从菜单启动Emacs后,打开终端用这个命令查看进程的实际路径:
ps -ef | grep emacs
输出里的进程路径,就是菜单启动器实际调用的Emacs二进制文件路径,一眼就能看明白。
额外小技巧:让菜单启动你想要的Emacs版本
如果想让菜单默认启动/usr/local/bin/emacs,最简单的办法是修改对应的.desktop文件,把Exec行改成绝对路径:
sudo nano /usr/share/applications/emacs.desktop
把Exec=emacs %F改成Exec=/usr/local/bin/emacs %F,保存退出后,下次从菜单启动就会用你编译的版本了。
备注:内容来源于stack exchange,提问作者oOosys

