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


8

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

但是,在玩游戏时,我对LXDE感到更舒服(背景:在当前状态下,Unity存档的帧率比Unity 2D或LXDE低得多-这是一个已知的错误并且正在研究中)。

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

进一步详细说明:当要求启动后登录时,我只希望LXDE作为玩家用户配置文件的选项出现在登录屏幕上,而我的标准用户配置文件仍应具有选择要使用的桌面环境的选项。

预先感谢您提供的任何见解!


下次应保留最后的选择作为默认值。不是这样做吗?如果默认使用正确的桌面环境,您是否有不想要其他选项的原因?
reverendj1 2012年

我问了这个问题之后,我也注意到了这种行为。基本上,这就是我想要的,也是我问的原因。除此之外,我仍然对解决方案感兴趣-我需要了解有关组和权限的更多信息'')我很惊讶这似乎是一个巨大的问题。不可能完成吗?
FuzzyQ 2012年

Answers:


4

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

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

sudo chattr +i /home/user/.dmrc

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

sudo chattr -i /home/user/.dmrc

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

首先,您需要为中的每个.desktop文件/usr/share/xsessions/创建一个脚本/usr/local/bin。在我的示例中,我将展示如何针对ubuntu.desktop,这是Unity DE,并使用LXDE作为DE来强制我们的受限用户(restricteduser)使用。查看LXDE.desktop,我们可以看到该Exec命令是/usr/bin/startlxde,没有TryExec命令。当您打开时,ubuntu.desktop我们看到Exec命令为gnome-session --session=ubuntuTryExec命令为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以便它将调用我们的脚本,而不是实际的DE。注释掉文件中的ExecTryExec行,并将其替换为:

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

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


1
首先:感谢您的精心解答!这是一个很狡猾的方法。但是,如果我没有弄错最后一部分,那么无论他在lightdm中选择了哪个选项,都会强制受限用户登录到lxde 。但是它仍会显示/ usr / share / xsessions /中列出的所有其他选项,我是否正确?在这种情况下,我宁愿选择选项1。遗憾的是,没有特定于用户的选项来设置桌面环境会话。从用户文件夹中删除不需要的xsession既方便又简单。
FuzzyQ

1
别客气。我有点把它当作挑战,我一直想进一步挖掘LightDM。是的,用户仍然会看到所有其他选项,这没关系,因为它们将被迫使用LXDE。就像我说的那样,.dmrc文件可以保留用户特定的默认值,但是,是的,没有一种内置的方法可以强制用户仅使用某些DE,或限制他们可以看到/使用的DE。没有我提出的技巧,所有人都是或没人。
reverendj1 2012年

1

在Debian Squeeze和Wheezy上,您还可以在一行中添加.xsessionrc

导出STARTUP = XXX

用户主目录中的XXX(您的强制会话脚本XXX参见上面的执行行),无论用户选择了什么,都强制使用某种会话类型。

应该也可以在Ubuntu上使用。

(看一下/etc/X11/Xsession.d/40x11-common_xsessionrc和50x11-common_determine-startup,看看为什么能行)


0

来自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

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

#!/bin/bash

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

例如,如果应允许另一个用户启动功能全面的桌面管理器,则它可能如下所示:

#!/bin/bash

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

在Ubuntu 16.04上使用lightdm测试

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.