问题描述
KDE桌面的显示管理器sddm的桌面会话中可以进行会话保留,当重新启动后,会恢复保留的会话中打开的软件以及桌面设置。
但是设置“恢复上一次会话”后,如果桌面的“自动启动”中设置了一些自动启动的软件,可能会导致一些意想不到的问题:
我的桌面启动时自动启动的程序列表:
遇到了以下问题:
- 桌面conky出现重影
当重启时,桌面会恢复上次会话中运行的conky,自动启动中的conky也会启动,但这两个conky使用的是同一个配置文件,因此造成conky重影。 - KDE桌面启动失败
Crow Translate是Linux桌面的一款轻量级翻译软件,设置为开机自动启动后,导致桌面启动失败。因为桌面启动时,恢复了上次会话中运行的Crow Translate,但当自动启动中的Crow Translate启动时,会提示已有Crow Translate正在运行:
Crow Translate的正在运行提示
因为KDE桌面的“自动启动”时,桌面还没加载出来,导致这个弹窗无法显示,也就无法点击“确定”,导致“自动启动”无法完成,桌面无法启动。
一般遇到此问题时,重启电脑,就可以正常启动。大概是因为,此时桌面启动失败,所以再次启动时,就不存在上次会话,直接以一个空白会话启动。
与Crow Translate形成对比的是fcitx-autostart
fcitx-autostart在已存在正在运行的进程时,会在终端提示,并且提示完成后立即退出,因此不会对桌面启动产生影响。
解决方法
以上两个问题,均与程序的单例运行有关:conky没有设置单例运行功能,因此会启动多个conky;Crow Translate的单例运行提示是以桌面弹窗形式提示,因此导致桌面无法正常启动。
因此,只需要把自动启动的conky与Crow Translate设置为只允许单例运行即可,flock
命令可以实现:
- 编辑自动启动中的conky与Crow Translate,修改执行的命令为:
- conky
flock -xn "/tmp/conky.flock" -c "/usr/bin/conky -p 3"
- Crow Translate
flock -xn "/tmp/crow.flock" -c "/usr/bin/crow"
- flock命令的帮助文档
用法:
flock [选项] <文件|目录> <命令> [<参数>…]
flock [选项] <文件|目录> -c <命令>
flock [选项] <文件描述符号码>
通过 shell 脚本管理文件锁。
选项:
-s, --shared 获取共享锁
-x, --exclusive 获取排他锁(默认)
-u, --unlock 移除锁
-n, --nonblock 失败而非等待
-w, --timeout <秒> 等待限定的时间
-E, --conflict-exit-code <数字> 冲突或超时后的退出代码
-o, --close 运行命令前关闭文件描述符
-c, --command <命令> 通过 shell 运行单个命令字符串
-F, --no-fork 执行命令时不 fork
–verbose 增加详尽程度
-h, --help 显示此帮助
-V, --version 显示版本