![Ubuntu 启动时使用 im-launch](https://linux22.com/image/918402/Ubuntu%20%E5%90%AF%E5%8A%A8%E6%97%B6%E4%BD%BF%E7%94%A8%20im-launch.png)
我在安装 Ubuntu 19.10 后发现了这个 im-launch 启动项,它执行
sh -c 'if ! [ -e "/usr/bin/ibus-daemon" ] && [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 im-launch true; fi'
我想知道这个条目的用途以及如果我禁用它会发生什么?
答案1
-e
检查文件/usr/bin/ibus-daemon
是否存在?存在表示真,不存在表示假。
!
想要确认上述值是假的,如果上述值是真,它将不会执行任何操作。
[ "x$XDG_SESSION_TYPE" = "xwayland" ]
根据您选择如何在登录屏幕上登录,这可以是以下任一值。您将选择 x11 还是 wayland。
"xx11" = "xwayland" "xwayland" = "xwayland"
$XDG_SESSION_TYPE 的示例输出
administrator@pratap:~$ echo $XDG_SESSION_TYPE
x11
另一个例子:
administrator@pratap:~$ echo $XDG_SESSION_TYPE
wayland
administrator@pratap:~$
如果第一个表达式为假,并且 x$XDG_SESSION_TYPE = xwayland,则执行命令env IM_CONFIG_CHECK_ENV=1 im-launch true
如果第一个表达式为真或者 x$XDG_SESSION_TYPE 不等于 xwayland,则不执行任何操作。
看man test
! EXPRESSION
EXPRESSION is false
和
-e FILE
FILE exists
您可以阅读有关此命令的更多信息then exec env IM_CONFIG_CHECK_ENV=1 im-launch true;
看man env
与人im-launch
默认情况下,在 Ubuntu 19.10 中/usr/bin/ibus-daemon
存在。因此该命令将不会被执行。
env IM_CONFIG_CHECK_ENV=1 im-launch true
当有文件/usr/bin/ibus-daemon
并且我的会话是x11
这是关于 IM 的一些内容
当没有文件/usr/bin/ibus-daemon
并且我的会话是wayland
这是与上面不同的地方,这意味着应用了环境,然后发生了连锁反应。
因此,如果您从启动列表中禁用或启用此功能,则不会发生任何事情,除非不存在此文件并且满足/usr/bin/ibus-daemon
您的会话条件。wayland
答案2
我正在进行一些研究,以了解如何配置 Ubuntu 以使其性能更佳,最后到了这里,这很有趣。
我的im-launch
创业入口:
sh -c 'if [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 im-launch true; fi'
由于@UnKNOWn 的回答很详细,但@foobar 的评论符合我的情况,所以我进行了深入研究。
分解命令:
sh
是一种命令语言解释器,它执行从命令行字符串、标准输入或指定文件读取的命令。
exec
Linux 中的命令用于从 bash 本身执行命令。
if CONDITION true THEN execute COMMAND
im-launch
命令用于启动输入法框架服务器守护进程(例如 ibus-daemon)、为客户端程序设置适当的环境变量并执行 SESSION-PROGRAM(例如 x-session-manager)。
ibus-daemon
是ibus的守护进程,也是用户激活ibus守护进程、引擎和面板的启动程序。
daemon
是一种作为后台进程运行的计算机程序,而不是受交互式用户的直接控制。
ibus
是一种智能输入总线。
bus
只是一组连接多个模块(处理器、内存、IO 设备)的线路。
这exec
然后我的问题是exec env
当我们已经执行命令时为什么要这样做sh
。
该exec
命令用指定的命令替换当前 shell 进程。通常,运行命令时会生成(分叉)新进程,而 exec 命令不会生成新进程。相反,当前进程会被新命令覆盖。换句话说,exec 命令会代替当前 shell 执行,而不会创建新进程。
使用env
- 如果要在执行主程序之前修改程序的环境,您通常会编写一个脚本,并在其末尾启动主程序。但那时脚本不需要留在内存中。因此,在这些情况下使用 exec,以便主程序可以替换母脚本。
答案3
答案4
我在 im-launch 启动项中添加了以下注释:“检查显示服务器类型,x11 或 wayland”