Ubuntu 启动时使用 im-launch

Ubuntu 启动时使用 im-launch

我在安装 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是一种命令语言解释器,它执行从命令行字符串、标准输入或指定文件读取的命令。

execLinux 中的命令用于从 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

我只想补充一点,这是@UnKNOWn 和他的评论暗示的。

即时通讯启动可能表示输入法。例如在维基百科上

这也支持了 Anit 的回答,他提到了 ibus,未来的读者可以在 wiki 上找到这里

简单来说,它似乎是一种检查要使用哪种键盘布局/语言的方法......但我不会引用我的话...从谷歌搜索来看,微软对这个问题有很多话要说。

只是认为“IM”位有点重要,而且以上答案对我来说并不清楚......

答案4

我在 im-launch 启动项中添加了以下注释:“检查显示服务器类型,x11 或 wayland”

相关内容