在用户登录时执行命令

Bow*_*ark 23 shell scripting login

在Linux桌面系统中,我想在用户登录时执行一个命令。

在阅读了其他一些帖子后,我尝试将命令插入~/.bashrc但未成功。此外,系统使用图形界面进行用户登录,因此该命令不应与shell 的启动相关。

我还尝试将命令附加到其中包含的脚本之一,但/etc/profile.d没有结果。

有没有另一种方法可以做到这一点?登录后系统读取的任何文件?

ter*_*don 22

不能保证图形显示管理器会读取经典启动文件。这在发行版和显示管理器之间发生变化。不过,以下方法之一应该可行。

  1. 使用桌面环境的本机方法设置启动应用程序。详细信息将取决于您使用的 DE,但您可以创建一个脚本来运行您的命令并将其添加到启动应用程序列表中。例如,在我的系统 (Cinnamon) 上,您可以通过“系统设置”=>“启动应用程序”来执行此操作。

  2. 使用~/.xprofile至少来自 GDM、LDM、LightDM 和 LXDM 登录管理器。

  3. 如果以上都不起作用,请尝试将命令添加到~/.profile: 这是登录 shell 的主要初始化文件,并且在登录时也由一些图形 shell 读取。

  4. 正如@derobert 在评论中指出的,您还可以使用免费桌面标准

    自动启动目录是 $XDG_CONFIG_DIRS/autostart,根据“桌面基本目录规范”中的“引用此规范”部分定义。

    如果相同的文件名位于多个自动启动目录下,则应仅使用最重要目录下的文件。

    示例:如果 $XDG_CONFIG_HOME 未设置,则用户主目录中的自动启动目录为 ~/.config/autostart/

    示例:如果未设置 $XDG_CONFIG_DIRS,则系统范围的自动启动目录为 /etc/xdg/autostart/

    示例:如果 $XDG_CONFIG_HOME 和 $XDG_CONFIG_DIRS 没有设置,并且两个文件 /etc/xdg/autostart/foo.desktop 和 ~/.config/autostart/foo.desktop 存在,那么只有文件 ~/.config/autostart/foo。桌面将被使用,因为 ~/.config/autostart/ 比 /etc/xdg/autostart/ 更重要

~/.bashrc这里完全无关,它只能由交互式非登录 shell 读取,因此在登录 shell 中被忽略,无论图形与否。

  • 可能要提到 `~/.config/autostart` 和 `/etc/xdg/autostart/`,这是根据 [桌面应用程序自动启动规范](http://standards.freedesktop.org/autostart-) 的标准位置规范/autostart-spec-latest.html)。还有`/etc/X11/Xsession.d`和`~/.xsession`。 (5认同)

oak*_*kad 7

另一种选择是使用 pam - 这将为您提供一种精确的方式来定义登录操作。

对于通用操作,您可以依赖 pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html )。但是,如果您需要以安全的方式执行更具体的操作,则可能存在更适合的更专业的 pam 模块,例如常用的 pam_mount(用于登录挂载 - http://manpages.ubuntu。 com/manpages/hardy/man8/pam_mount.8.html)或 pam_echo (用于发送给用户的任意消息 - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html)。

一般而言,pam 是一个非常简洁的自定义登录系统,因此您可能需要更多地研究它,而不是像其他人建议的那样依赖可能不安全的脚本。

例子

鉴于一个相当典型的 /etc/pam.d/system-auth 我们可以在登录后使用 pam_exec 像这样:

session         optional        pam_ssh.so
session         required        pam_limits.so
session         required        pam_env.so
session         optional        pam_mktemp.so
session         required        pam_unix.so
session         optional        pam_exec.so /usr/local/bin/my_prog
session         optional        pam_permit.so
Run Code Online (Sandbox Code Playgroud)

/usr/local/bin/my_prog用户成功登录后,任意程序在哪里运行。

  • 这是一个很好的答案,但您应该包含一个示例,说明您将添加 `pam` 配置,因为这很重要。 (2认同)