好的,根据我对LightDM(登录管理器)的理解,似乎不支持限制特定用户的桌面环境。这是一个全盘接受或者完全不接受的交易。默认情况下,当用户选择一个桌面环境时,它将成为他们的默认桌面环境。下次登录时,除非他们选择另一个桌面环境,否则他们将登录到他们的默认桌面环境。
然而,您可以使用户无法更改此设置。这个用户仍然可以选择不同的桌面环境,但如果他们这样做,它不会改变他们的默认设置。我认为这是最安全的方法,如果您不担心该人会更改它。您只需要编辑他们的.dmrc文件(位于他们的主目录中,即/home/user)。这是存储他们默认会话的地方。在该文件中更改Session变量为您想要的任何值,例如ubuntu是默认的Unity桌面环境,ubuntu-2d是Unity 2D,LXDE是LXDE。为了确保在使用其他桌面环境登录时不会更改它,我们可以将其设置为不可变(无法更改)。
sudo chattr +i /home/user/.dmrc
现在除非您移除不可变标志,否则没有人能够更改该文件(包括根目录和其他程序)。
sudo chattr -i /home/user/.dmrc
如果您绝对不希望该用户使用其他桌面环境登录,我确实找到了一种非常巧妙的方法(即自担风险)来实现这一点。我有点无聊,觉得这是一个有趣的尝试。LightDM可以看到的所有不同的桌面环境都保存在
/usr/share/xsessions
目录下,以
.desktop
文件的形式存在。顺便说一句,您可以删除任何您不想在登录界面上显示的桌面环境(但这将对所有用户生效)。如果您打开其中任何一个文件,它们都相当简单明了。它们是基本的桌面启动器文件,就像桌面上的所有快捷方式一样。每个文件都包含一个
Exec
行,这是在登录界面选择桌面环境时执行的命令(即启动哪个桌面环境)。我们将利用这一点来检查登录的用户。如果用户是受限制的用户,我们将强制他们使用特定的桌面环境。
首先,对于在
/usr/share/xsessions/
中的每个
.desktop
文件,您需要在
/usr/local/bin
中创建一个脚本。以
ubuntu.desktop
为例,这是Unity DE,并且我们将强制我们的受限用户(restricteduser)使用LXDE作为DE。查看LXDE.desktop,我们可以看到
Exec
命令是
/usr/bin/startlxde
,并且没有
TryExec
命令。当您打开
ubuntu.desktop
时,我们看到
Exec
命令是
gnome-session --session=ubuntu
,而
TryExec
命令是
unity
。
TryExec
命令就是它听起来的样子。在运行
Exec
命令之后,它将尝试运行
TryExec
命令,但如果失败,它不会崩溃。
现在,我们可以根据从.desktop文件中获取的命令来创建我们的脚本。我们将把它们放在/usr/share/bin目录下。我们需要创建两个脚本,一个用于Exec命令,另一个用于TryExec命令。我们可以这样做:
ubuntude.sh
#!/bin/bash
if [ `/usr/bin/whoami` = "restricteduser" ] ; then
/usr/bin/startlxde
else
gnome-session --session=ubuntu
fi
ubuntudetry.sh
#!/bin/bash
if [ `/usr/bin/whoami` != "restricteduser" ] ; then
unity
fi
我们只是在测试登录的人是否是我们的受限用户,并启动相应的DE。现在,我们需要确保他们是可执行的。
sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh
我们现在需要更改我们的
ubuntu.desktop
文件,以便它调用我们的脚本,而不是实际的桌面环境。在文件中注释掉
Exec
和
TryExec
行,并将其替换为以下内容:
Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh
只需重复这个过程,针对你可能拥有的其他桌面环境。如果某个桌面环境没有
TryExec
,那么也就不需要为它创建一个detry.sh脚本,因为LXDE并不使用
TryExec
。显然,这有点破解的味道,你应该确保在编辑文件之前备份它们,但是如果你绝对需要确保用户登录到正确的桌面环境,这个方法是可行的。