Fuz*_*zyQ 8 permissions login users lxde unity-greeter
我正在运行或多或少的 Ubuntu Precise 12.04 标准安装,我对使用 Unity 桌面环境执行日常任务感到非常满意。
但是,在玩游戏时,我对 LXDE 感觉更舒服(背景:在当前状态下,Unity 的帧速率比 Unity 2D 或 LXDE 低得多——这是一个已知的错误,正在处理中)。
为此,我创建了一个玩家用户配置文件,现在我想将其限制为仅使用 LXDE 桌面环境。
进一步详细说明:当被要求在启动后登录时,我只希望 LXDE 作为游戏玩家用户配置文件的选项出现在登录屏幕上,而我的标准用户配置文件仍然可以选择使用哪个桌面环境。
在此先感谢您提供可能有帮助的任何见解!
好吧,根据我对 LightDM(登录管理器)的理解,它似乎不支持限制特定用户的桌面环境。这是一个全有或全无的交易。默认情况下,当用户选择桌面环境时,该环境将成为他们的默认桌面环境。当他们下次登录时,除非他们选择其他登录方式,否则他们将使用默认登录方式。
但是,您可以将其设置为用户无法更改此设置。该用户仍然可以选择不同的桌面环境,但即使这样做,也不会更改其默认桌面环境。我相信这是最安全的方法,如果你不担心这个人会改变它。您所要做的就是编辑他们的.dmrc
文件(位于他们的主目录中,即/home/user)。这是存储默认会话的位置。将该文件中的变量更改Session
为您想要的任何内容,即ubuntu
默认的 Unity DE、ubuntu-2d
Unity 2D 和LXDE
LXDE。为了使其在使用另一个 DE 登录时不会更改,我们可以简单地将其设置为不可变(不可更改):
sudo chattr +i /home/user/.dmrc
Run Code Online (Sandbox Code Playgroud)
现在没有人能够更改该文件(包括 root 和其他程序),除非您删除不可变标志:
sudo chattr -i /home/user/.dmrc
Run Code Online (Sandbox Code Playgroud)
如果你绝对不希望这个用户用另一个桌面环境登录,我确实想出了一个非常hacky的方法(即你自己承担风险)来实现这一点。我有点无聊,这似乎是一个有趣的尝试。LightDM 可以看到的所有不同的 DE 都保存为/usr/share/xsessions
文件.desktop
。仅供参考,您可以删除任何您不希望在登录屏幕上显示的内容(但这将为所有用户删除它)。如果您打开其中任何一个,它们都相当简单。它们是基本的桌面启动器文件,就像桌面上的所有快捷方式一样。每一个都包含一行Exec
,这是当您在登录屏幕上选择 DE 时执行的内容(即启动哪个 DE)。我们将利用这一点并检查哪个用户正在登录。如果该用户是我们的受限用户,我们将强制他们使用某个 DE。
首先,对于.desktop
中的每个文件,/usr/share/xsessions/
您需要在/usr/local/bin
. 对于我的示例,我将展示如何为ubuntu.desktop
Unity DE 执行此操作,并使用 LXDE 作为我们强制受限用户 (restricteduser) 使用的 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
Run Code Online (Sandbox Code Playgroud)
ubuntudetry.sh
#!/bin/bash
if [ `/usr/bin/whoami` != "restricteduser" ] ; then
unity
fi
Run Code Online (Sandbox Code Playgroud)
我们只是测试登录的人是否是我们的受限用户,并启动适当的 DE。现在,我们需要确保它们是可执行的:
sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh
Run Code Online (Sandbox Code Playgroud)
我们现在需要更改我们的ubuntu.desktop
脚本,以便它调用我们的脚本,而不是实际的 DE。注释掉文件中的Exec
和行,并将其替换为:TryExec
Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh
Run Code Online (Sandbox Code Playgroud)
只需对您可能拥有的任何其他 DE 重复此过程即可。如果没有TryExec
DE,则也无需为其创建 detry.sh 脚本,因为 LXDE 不使用TryExec
. 显然这有点棘手,您应该确保在编辑文件之前备份所有文件,但如果您绝对需要确保用户登录到正确的 DE,那么它会起作用。