五月 30

linux 打开应用时鼠标显示忙碌

每次双击打开一个应用时最烦的就是不知道是否正在打开,如果很快打开还好,如果很慢的话能可能还会再去点它一次,然后突然就出现了两个窗口。我发现在linux下打开有的应用鼠标会显示忙碌,而有的不会。这是什么情况呢?

首先要知道,一个应用要能够被dash搜索到,需要有一个“索引”,就是.desktop文件,它放在/usr/share/applications/ 这个文件夹里。比如firefox,就是firefox.desktop。打开该文件,可以发现这样的信息:

[Desktop Entry]
Name=ISE
Exec=/home/zhangzimou/ISE/14.7/ISE_DS/ISE/bin/lin64/ise
Terminal=false
Type=Application
StartupNotify=true

这个是我自己参照别的程序写的,很简单。注意到最后一行

StartupNotify=true

这个就是我们需要的,它会让我们打开应用的时候鼠标显示忙碌。所以现在需要做的就是让该文件夹下所有的文件都加上这一行。

注意到有些应用,比如wps,文件里面是StartupNotify=false,而有些应用则没有StartupNotify这个参数。当然了最简单的方法就是不管三七二十一直接添加,这样也能实现目的。在终端里输入(注意只需要输入$之后的命令):

$ cd /usr/share/applications/
$ sudo find -name "*.desktop"|xargs sed -i '$a StartupNotify=true'

find -name "*.desktop" 的意思是查找该文件夹一下所有扩展名为desktop的文件,然后将这些文件作为参数,传递给后面的sed命令。sed -i '$a StartupNotify=true' file 表示在文件file的最后一行添加StartupNotify=true,这里的file就是前面传过来的参数。

当然了这样虽然能够达到目的,但是太low了,有可能有些文件里本来就有StartupNotify=true,这样一来就变成两行了,不太好吧。所以这样:

$ cd /usr/share/applications/
$ sudo find -name "*.desktop"|xargs sed -i '/StartupNotify/d'
$ sudo find -name "*.desktop"|xargs grep "StartupNotify" -L|xargs sed -i '$a StartupNotify=true'

第二行表示先将所有文件中含有StartupNotify的行删除(因为可能存在StartupNotify=false或true),第三行grep "StartupNotify" -L 表示获取所有不含有StartupNotify的文件,然后将这些文件作为参数传递给后面的sed,在这些文件的最后一行加上StartupNotify=true。

这样基本就搞定了,但是对于chrome或者firefox不管用。为什么呢?因为firefox的.desktop文件其实是分成了几个部分,每个部分有不同的用途,上面的方法是将StartupNotify=true放在了最后,也就是最后一个部分,而它能够起作用的其实是第一个部分。所以干脆直接放到第二行吧(第一行是[Desktop Entry]),或者为了保险放在第三行算了(有可能第一行是#!/usr/bin/env xdg-open,这样第二行就是[Desktop Entry])。将上面代码的第三行改成:

$ sudo find -name "*.desktop"|xargs grep "StartupNotify" -L|xargs sed -i '2a StartupNotify=true'

2a表示在原本的第二行后插入,也就是放在了第三行了。

这样就搞定了。

标签:

Posted 2015年5月30日 by zhangzimou in category computer&internet