在Linux桌面系统中,我想在用户登录时执行命令。
在阅读了其他一些帖子后,我尝试插入命令~/.bashrc
但没有成功。而且,系统使用图形界面进行用户登录,因此该命令不应与shell的启动相关。
我还尝试将该命令附加到其中包含的脚本之一,/etc/profile.d
但没有结果。
还有其他方法可以做到这一点吗?登录后系统会读取什么文件?
答案1
无法保证图形显示管理器将读取经典启动文件。这在发行版和显示管理器之间会发生变化。不过,以下其中一项应该可以工作。
使用桌面环境的本机方法来设置启动应用程序。详细信息取决于您使用的 DE,但您可以创建一个运行命令的脚本并将其添加到启动应用程序列表中。例如,在我的系统(Cinnamon)上,您可以通过“系统设置”=>“启动应用程序”来执行此操作。
使用
~/.xprofile
,这是来源至少由 GDM、LDM、LightDM 和 LXDM 登录管理器执行。如果上述方法均不起作用,请尝试将命令添加到
~/.profile
: 这是登录 shell 的主要初始化文件,并且在登录时也会被某些图形 shell 读取。正如@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 上被忽略,无论是否图形。
答案2
另一种选择是使用 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
/usr/local/bin/my_prog
用户成功登录后正在运行的任意程序在哪里。
答案3
根据这个主题:登录后自动运行命令?
.bashrc
您拥有(不是您需要的)解决方案和启动应用程序的解决方案。我引用丹尼尔·S.:
gnome-session-properties
可用于配置启动应用程序。另外,如果您希望应用程序在系统启动时运行,您可以向 crontab 添加如下规则(使用 编辑 crontab
crontab -e
):@reboot /run/this/program/at/boot >/dev/null 2>&1