我有一个自定义命令,需要在 X 会话打开(鼠标配置)时执行。
我用它制作了一个脚本,现在我想确保它在会话打开时执行。
有一些依赖于发行版的解决方案(启动程序等),但我宁愿找到 Linux 级别的解决方案(我碰巧经常更改我的发行版)。
.zshrc
我可以在(或)中获取我的脚本.bashrc
,但我认为.zshrc
在任何终端打开之前都不会执行,不是吗?
另外,我希望此配置是用户特定的,在我的~
存储库中,而不是在系统中。
我怎样才能做到这一点?
答案1
通常的设置是 X 显示管理器运行/etc/X11/Xsession
shell 脚本,并且该脚本从目录 中获取或运行脚本/etc/X11/Xsession.d
。
在 Ubuntu 系列发行版上(可能还有其他 Debian 衍生版本),该目录中的标准文件之一会从.xsessionrc
您的主目录中获取该文件(如果存在)(默认情况下不存在)。
如果创建该文件,则可以将相关命令放入其中,包括获取另一个.*rc
文件或其他命令。为非 shell 应用程序(即不在任何终端仿真中运行的应用程序)设置环境变量非常有用。
笔记:
- 在某些发行版中,
.xsessionrc
没有来源。您应该检查/etc/X11/Xsession.d
目录。获取用户的资源.xsessionrc
通常是由/etc/X11/Xsession.d/40x11-common_xsessionrc
脚本完成的。如果该文件不存在并且没有其他脚本来源您的.xsessionrc
,您可以随时添加您自己的脚本来来源它。 - 运行的 shell
/etc/X11/Xsession
通常是/bin/sh
- 它可能是也可能不是您最喜欢的 shell 的符号链接。您应该检查该 shell 的功能。例如,使用[[
可能不起作用。.
和命令export
通常是安全的。
答案2
我不确定您对“会话打开”的理解,但.xxxrc
每当启动交互式 shell 时,都会调用特定 shell 的文件(根据 POSIX)。
对于登录 shell 以及当前会话中的嵌套 shell 来说都是如此。
答案3
.zshrc
是zsh的配置文件。当您启动 zsh 的交互式实例时会读取它。交互式 shell 是您在终端上与之交互的 shell。 GUI 登录不涉及交互式 shell(顺便说一句,在典型系统上根本不涉及 zsh)。
.zshrc
无法帮助您进行 GUI 配置。当您打开终端模拟器,或者当您登录文本控制台或通过网络时,它会被读取。它永远不会在你想做的事情的正确时间被阅读。
没有完全可移植的方法来在会话打开时运行命令。最可靠的方法是使用窗口管理器桌面环境的启动程序工具(如果有的话)(大多数都有)。这是与分发无关的唯一方法。
如果您通过 启动 GUI startx
,则会执行您的~/.xinitrc
,因此请将命令放在那里。
对于图形模式登录,如果您想要一种独立于 DE/WM 的方式,那么您需要根据发行版提供多个挂钩。根据显示管理器、桌面环境(或会话管理器或窗口管理器)以及您的发行版(或系统管理员)设置会话类型的方式,可能存在也可能不存在可以提供运行命令的文件在 GUI 登录上。
- 如果您登录到“自定义会话”,则会执行
~/.xsession
仅有的。此文件的作用是启动一切,包括 DE/SM/WM。 - 在某些配置上,
~/.xprofile
会被读取。 - 在某些配置上,
~/.xsessionrc
会被读取。
.xprofile
如果像或 这样的文件.xsessionrc
执行得太早,您可能需要使用肮脏的技巧来让代码稍后执行。检查脚本/etc/X11/Xsession.d
或类似的脚本。这将更加依赖于发行版。再一次,在 GUI 登录上执行代码的最简单、最便携的方法,以及在所有系统内容之后执行的方法,是向窗口管理器或桌面环境声明启动命令。事实上,使用挂钩到系统会话启动脚本的脚本的主要原因是让您的代码尽早执行,例如因为您想要更改 WM/DE 的调用方式。
1显示管理器是当您以图形模式登录时要求您输入密码的程序。