我已经多次看到这个问题涉及多种 Linux 版本,所以让我们尝试详尽说明。
用户登录桌面会话之前和之后执行脚本/命令/程序的方法是什么?
答案1
介绍
在用户登录图形环境之前在图形环境中运行程序取决于您的显示管理器。显示管理器负责为您提供登录界面并在登录后设置您的图形环境。最重要的是以下内容:- GDM是 GNOME 显示管理器。
- 光DM是一个跨桌面的显示管理器,可以使用任何工具包编写的各种前端。
- LXDM是 LXDE 显示管理器,但独立于 LXDE 桌面环境。
- SDDM是 X11 和 Wayland 的现代显示管理器,旨在快速、简单和美观。
我们将回顾如何在任何用户登录之前弹出显示管理器时设置命令的执行,以及如何在某人最终登录时执行某些操作。
如果你不知道自己运行的是哪一个,可以参考这个问题:
有没有一个简单的 Linux 命令可以告诉我我的显示管理器是什么?
重要的
在开始之前,您将编辑文件,除非提及执行命令为root
.不要删除这些文件中的现有内容,除非您知道自己在做什么并且要小心放入这些文件中的内容。这可能会导致您无法登录。
GDM
使用 GDM 时要小心,它将以“root”身份运行所有脚本,与 0 不同的错误代码可能会限制您的登录能力,并且 GDM 将等待您的脚本完成,使其在命令运行时无响应。如需完整说明[阅读文档][5]。登录前
如果您需要在用户登录之前运行命令,您可以编辑文件:`/etc/gdm3/Init/Default`。该文件是一个 shell 脚本,将在显示管理器显示给用户之前执行。登录后
如果您需要在用户登录后但在会话初始化之前执行操作,请编辑文件:`/etc/gdm3/PostLogin/Default` 如果您想在会话初始化会话之后执行命令(env、图形环境) ,登录...)编辑文件:`/etc/gdm3/PreSession/Default`光DM
我将讨论 lightdm.conf 而不是 /etc/lightdm.conf.d/*.conf。您可以做您想做的事,重要的是了解您可以使用的选项。使用 lightDM 时要小心,您可能已经启动了其他几个脚本,您应该在编辑配置文件之前精确读取它。此外,放置这些脚本的顺序可能会影响会话加载的方式。LightDM 的工作方式与其他的有点不同,您将在主配置文件中放置选项来指示将执行的脚本。
编辑主 lightDM conf 文件/etc/lightdm/lightdm.conf
。
您应该在第一行添加[Seat:*]
,如此处所示:
lightdm 的更高版本(15.10 及以上)已将过时的 [SeatDefaults] 替换为 [Seat:*]
登录前
添加一行 `greeter-setup-script=/my/path/to/script` 该脚本将在 lightDM 显示登录界面时执行。登录后
添加一行 `session-setup-script=/script/to/start/script` 这将在用户成功登录后以 `root` 身份运行脚本。LXDM
登录前
如果你想在任何人登录之前执行命令,你可以编辑 shell 脚本:`/etc/lxdm/LoginReady`登录后
如果您想在某人以 root 身份登录后执行命令,您可以编辑 shell 脚本:`/etc/lxdm/PreLogin` 如果您想以登录用户身份运行命令,您可以编辑脚本:`/等/lxdm/登录后`SDDM
登录前
修改位于 的脚本/usr/share/sddm/scripts/Xsetup
。该脚本在登录屏幕出现之前执行,主要用于调整 X11 中的显示器显示。不确定 Wayland 的等价物是什么
登录后
sddm
现在将获取位于 的脚本/usr/share/sddm/scripts/Xsession
,该脚本又将获取用户的点文件取决于他们的默认外壳。
对于 bash shell,它将获取~/.bash_profile
(以及其他),对于 zsh,它将获取${ZDOTDIR:-$HOME}/.zprofile
(以及其他)。您可以借此机会修改这些文件,以便在登录后运行您需要的任何其他命令。
答案2
我需要在登录之前配置我的鼠标,以便所有用户都可以从中受益。我找到了阅读本文的解决方案问题。我认为我应该考虑通过 GDM 配置它,但要在任何会话开始时进行设置,我必须通过 XDG 自动启动进行设置。在 /etc/xdg/autostart 中,有一堆 .desktop 文件,它们在每个 xsessions 登录时运行(在我的 ubuntu 系统中)。
答案3
使用 GDM3,您需要放入一个脚本/usr/share/gdm/greeter/autostart/
(需要 sudo 权限)才能在登录之前运行。例如,要在登录前打开键盘背光(这样我就可以在黑暗的房间里看到输入密码的按键):
sudo nano /usr/share/gdm/greeter/autostart/led.desktop
并将其写入文件中:
[Desktop Entry]
Type=Application
Name=ledstart
Exec=xset led on
NoDisplay=true
X-GNOME-AutoRestart=true
以 开头的行Exec=
是您放置命令的位置。
不幸的是,Gnome 似乎在登录后重置了会话,所以这个命令不会持续 - 然后我必须xset led on
为每个用户登录设置一个新命令。如果我找到解决方案,我会更新答案。