如何限制用户使用特定的桌面环境?

如何限制用户使用特定的桌面环境?

我正在运行一个或多或少标准版的 Ubuntu Precise 12.04,并且我对使用 Unity 桌面环境完成日常任务感到非常满意。

然而,在玩游戏时,我感觉 LXDE 更舒服(背景:在当前状态下,Unity 实现的帧速率比 Unity 2D 或 LXDE 低得多 - 这是一个已知的错误并且正在努力解决)。

为此,我创建了一个游戏玩家用户配置文件,现在我想限制它仅使用 LXDE 桌面环境。

进一步阐述这一点:当被要求在启动后登录时,我只希望 LXDE 作为游戏玩家用户配置文件的选项出现在登录屏幕上,而我的标准用户配置文件仍然应该有选择使用哪个桌面环境的选项。

提前感谢任何可能有帮助的见解!

答案1

好的,根据我对 LightDM(登录管理器)的理解,它似乎不支持限制桌面环境具体的用户。这是一项全有或全无的交易。默认情况下,当用户选择一个桌面环境时,该桌面环境将成为他们的默认桌面环境。下次登录时,除非他们选择另一个桌面环境,否则他们将登录到默认桌面环境。

但是,您可以让用户无法更改此设置。此用户仍然可以选择其他桌面环境,但如果他们这样做,则不会更改其默认设置。如果您不担心该人会更改它,我认为这是最安全的方法。您所要做的就是编辑他们的.dmrc文件(位于他们的主目录中,即 /home/user)。这是存储其默认会话的位置。Session将该文件中的变量更改为您想要的任何内容,即ubuntu默认的 Unity DE、ubuntu-2dUnity 2D 和LXDELXDE。为了使他们在使用其他 DE 登录时不会更改此设置,我们可以简单地将其设为不可变(不可更改):

sudo chattr +i /home/user/.dmrc

现在,除非您删除不可变标志,否则任何人都无法更改该文件(包括 root 和其他程序):

sudo chattr -i /home/user/.dmrc

如果您绝对不希望此用户使用其他 DE 登录,我确实找到了一种非常黑客的方法(即风险自负)来实现此目的。我有点无聊,这似乎是一件有趣的事情。LightDM 可以看到的所有不同 DE 都保存为/usr/share/xsessions文件.desktop。仅供参考,您可以删除任何您不想在登录屏幕上显示的文件(但这将为所有用户删除它)。如果您打开其中任何一个,它们都相当简单。它们是基本的桌面启动器文件,就像桌面上的所有快捷方式一样。每一个都包含一行Exec,这是在登录屏幕上选择 DE 时执行的行(即启动哪个 DE)。我们将利用这一点并检查哪个用户正在登录。如果用户是我们的受限用户,我们将强制他们使用某个 DE。

首先,您需要为.desktop中的每个文件创建一个脚本。在我的示例中,我将展示如何为 执行此操作,即 Unity DE,并使用 LXDE 作为我们强制受限用户 (restricteduser) 使用的 DE。查看 LXDE.desktop,我们可以看到命令是,并且没有命令。当您打开时,我们会看到命令是,命令是。命令就是它的名字。运行命令后,它将尝试运行命令,但如果失败,它不会崩溃。/usr/share/xsessions//usr/local/binubuntu.desktopExec/usr/bin/startlxdeTryExecubuntu.desktopExecgnome-session --session=ubuntuTryExecunityTryExecExecTryExec

现在,利用从文件中获取的命令,.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以便它调用我们的脚本,而不是实际的 DE。注释掉文件中的Exec和行,并将其替换为以下内容:TryExec

Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh

只需对您可能拥有的任何其他 DE 重复此过程即可。如果没有TryExecDE,则也无需为其创建 detry.sh 脚本,因为 LXDE 不使用TryExec。显然这有点不靠谱,您应该确保在编辑任何文件之前先备份它们,但如果您绝对需要确保用户登录到正确的 DE,它将起作用。

答案2

在 Debian Squeeze 和 Wheezy 上,你也可以用一行添加 .xsessionrc

导出 STARTUP=XXX

(其中 XXX 是强制会话脚本,参见上面的 Exec-Line)在用户主目录中强制某种会话类型,而不管用户选择了什么。

也应该可以在 Ubuntu 上运行。

(查看 /etc/X11/Xsession.d/40x11-common_xsessionrc 和 50x11-common_determine-startup 看看为什么这样做有效)

答案3

reverendj1 的回答对我不起作用。原因可能是您在 Exec= 中指定的值未直接执行,而是作为参数传递给 /etc/X11/Xsession。(来源:https://askubuntu.com/a/857420/873016

解决问题的另一种方法:
1.备份所有/usr/share/xsessions/.desktop 文件
2. 删除所有 /usr/share/xsessions/
.desktop 文件
3. 仅创建 /usr/share/xsessions/default.desktop

[Desktop Entry]
Name=Default
Comment=This session is the default session. It will look up the user specific desktop session in ~/.xsession.
Exec=default

“default” 是 Xsession 的关键字,将在用户目录中查找特定会话。4
. 现在为每个用户名创建一个 /home/{username}/.xsession 文件。对于“类似信息亭”的应用程序,它应该如下所示:

#!/bin/bash

cd /home/{yourUsername}/ && ./startApplication.py
logout

例如,如果允许另一个用户启动功能齐全的桌面管理器,它看起来可能像这样:

#!/bin/bash

exec icewm-session
  1. 确保 ~/.xsession 文件是可执行的
sudo chmod +x ~/.xsession

在 ubuntu 16.04 上使用 lightdm 进行了测试

相关内容