im-launch 在 Ubuntu 启动中

Afs*_*sal 34 startup startup-applications

我在安装 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'

我想知道这个条目的目的,如果我禁用它会发生什么?

UnK*_*OWn 32

-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
Run Code Online (Sandbox Code Playgroud)

另一个例子:

administrator@pratap:~$ echo $XDG_SESSION_TYPE
wayland
administrator@pratap:~$ 
Run Code Online (Sandbox Code Playgroud)

如果第一个表达式为假且 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
Run Code Online (Sandbox Code Playgroud)

   -e FILE
          FILE exists
Run Code Online (Sandbox Code Playgroud)

你可以阅读更多关于这个命令的作用 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
Run Code Online (Sandbox Code Playgroud)

当有文件/usr/bin/ibus-daemon并且我的会话是x11

这是关于 IM 的一些事情

在此处输入图片说明

当没有文件/usr/bin/ibus-daemon并且我的会话是wayland

这是与上面不同的事情,这意味着应用了env,然后发生了连锁反应。

在此处输入图片说明

因此,如果您从启动列表中禁用或启用此功能,除非此文件不存在/usr/bin/ibus-daemon并且您的会话wayland条件满足,否则不会发生任何事情。

  • 嗯,我可以理解命令的语法 - 但简单地说:它最终做了什么?什么*是*`im-launch`? (14认同)
  • 谢谢你 。感谢您对我的疑问的详细回答。像您这样的人让 askubuntu.com 变得很棒。 (8认同)
  • 我知道如何使用联机帮助页...但是`man im-launch` 并没有启发我。看起来水平很低。为什么 Ubuntu 把它放到我的用户空间启动程序中? (3认同)
  • 它与多语言、键盘布局有关。特别是某种中文、日语等。 (2认同)

小智 5

我正在研究如何配置 Ubuntu 以提高其性能,最终来到这里,这很有趣。

我的im-launch启动入口:

sh -c 'if [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 im-launch true; fi'
Run Code Online (Sandbox Code Playgroud)

由于@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,以便主程序可以替代母脚本。