在用户登录时执行命令


23

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

阅读其他文章后,我尝试将命令插入其中,~/.bashrc但未成功。此外,系统使用图形界面进行用户登录,因此该命令不应与外壳程序的启动有关。

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

还有另一种方法吗?登录后系统读取的任何文件?


Answers:


21

不能保证图形显示管理器将读取经典启动文件。这在发行版之间以及在展示管理器之间发生了变化。但是,以下方法之一应该起作用。

  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忽略,图形或没有。


5
可能要提一下~/.config/autostart/etc/xdg/autostart/根据《桌面应用程序自动启动规范》,这是标准位置。还有/etc/X11/Xsession.d~/.xsession
derobert

6

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

对于一般动作,您可以依赖pam_exec(http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html)。但是,如果您需要以安全的方式执行更具体的操作,则可能存在更合适的专用pam模块,例如常用的pam_mount(用于登录挂载-http://manpages.ubuntu。 COM /手册页/耐寒/ 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

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


2
这是一个很好的答案,尽管您应该包括添加pam配置的示例,因为这并非易事。
Graeme 2014年

2

根据此主题:登录后自动运行命令?

您拥有.bashrc(不是您所需要的)解决方案和启动应用程序的解决方案。我引用Daniel S .:

gnome-session-properties 可用于配置启动应用程序。

另外,如果您希望应用程序在系统引导时运行,则可以将以下规则添加到crontab中(使用来编辑crontab crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.