Wie beschränke ich einen Benutzer auf eine bestimmte Desktop-Umgebung?

8

Ich verwende eine mehr oder weniger standardmäßige Installation von Ubuntu Precise 12.04 und bin sehr zufrieden mit der täglichen Arbeit mit der Unity-Desktop-Umgebung.

Wenn es ums Spielen geht, fühle ich mich mit LXDE jedoch viel wohler (Hintergrund: Im aktuellen Zustand erzielt Unity viel niedrigere Frameraten als z. B. Unity 2D oder LXDE - es ist ein bekannter Fehler, an dem gearbeitet wird).

Zu diesem Zweck habe ich ein Spielerbenutzerprofil erstellt und möchte es jetzt auf die Verwendung der LXDE-Desktopumgebung beschränken.

Um dies weiter zu erläutern: Wenn Sie aufgefordert werden, sich nach dem Start anzumelden, soll nur LXDE als Option für das Spielerbenutzerprofil auf dem Anmeldebildschirm angezeigt werden, während mein Standardbenutzerprofil weiterhin die Option zur Auswahl der zu verwendenden Desktopumgebung haben sollte.

Vielen Dank im Voraus für jeden Einblick, der hilfreich sein könnte!

FuzzyQ
quelle
Es sollte Ihre letzte Auswahl als Standard für das nächste Mal beibehalten. Tut es das nicht? Gibt es einen Grund, warum Sie die anderen Optionen nicht möchten, wenn standardmäßig die richtige Desktop-Umgebung verwendet wird?
Reverendj1
Ich bemerkte dieses Verhalten auch, nachdem ich die Frage gestellt hatte. Grundsätzlich wollte ich das schon und warum ich gefragt habe. Abgesehen davon bin ich immer noch an einer Lösung interessiert - ich muss mehr über Gruppen und Berechtigungen erfahren. '') Ich bin sehr überrascht, dass dies ein so großes Problem zu sein scheint. Ist es unmöglich zu erreichen?
FuzzyQ

Antworten:

4

Nach meinem Verständnis von LightDM (dem Anmeldemanager) scheint es nicht unterstützt zu sein, die Desktop-Umgebungen für einen bestimmten Benutzer einzuschränken . Es ist alles oder nichts. Wenn ein Benutzer eine Desktop-Umgebung auswählt, wird diese standardmäßig zu seiner Standard-Desktop-Umgebung. Wenn sie sich das nächste Mal anmelden, werden sie standardmäßig angemeldet, sofern sie keine andere auswählen.

Sie können es jedoch so gestalten, dass der Benutzer dies nicht ändern kann. Dieser Benutzer kann weiterhin eine andere Desktop-Umgebung auswählen. Wenn dies jedoch der Fall ist, wird die Standardeinstellung nicht geändert. Ich glaube, dies ist der sicherste Weg, dies zu tun, wenn Sie nicht befürchten, dass die Person es ändern wird. Alles, was Sie tun müssen, ist die .dmrcDatei zu bearbeiten (befindet sich in ihrem Home-Verzeichnis, dh / home / user). Hier wird ihre Standardsitzung gespeichert. Ändern Sie die SessionVariable in dieser Datei nach Ihren Wünschen, dh ubuntuals Standard-Unity DE, ubuntu-2dals Unity 2D und LXDEals LXDE. Damit dies nicht geändert wird, wenn sie sich mit einem anderen DE anmelden, können wir es einfach unveränderlich (unveränderlich) machen:

sudo chattr +i /home/user/.dmrc

Jetzt kann niemand diese Datei ändern (Root und andere Programme enthalten), es sei denn, Sie entfernen das unveränderliche Flag:

sudo chattr -i /home/user/.dmrc

Wenn Sie absolut NICHT möchten, dass sich dieser Benutzer jemals mit einem anderen DE anmeldet, habe ich einen wirklich hackigen Weg gefunden (dh dies geschieht auf eigenes Risiko), um dies zu erreichen. Ich war irgendwie gelangweilt und es schien mir eine lustige Sache zu sein, es zu versuchen. Alle verschiedenen DEs, die LightDM sehen kann, werden /usr/share/xsessionsals .desktopDateien gespeichert. Zu Ihrer Information, Sie können alle diese Elemente löschen, die nicht auf dem Anmeldebildschirm angezeigt werden sollen (dies wird jedoch für ALLE Benutzer entfernt). Wenn Sie eine davon öffnen, sind sie ziemlich einfach. Dies sind grundlegende Desktop-Startdateien, genau wie alle Verknüpfungen auf Ihrem Desktop. Jeder enthält eineExecZeile, die ausgeführt wird, wenn Sie Ihre DE auf dem Anmeldebildschirm auswählen (dh welche DE gestartet wird). Wir werden dies nutzen und prüfen, welcher Benutzer sich anmeldet. Wenn der Benutzer unser eingeschränkter Benutzer ist, werden wir ihn zwingen, ein bestimmtes DE zu verwenden.

Zunächst müssen Sie für jede .desktopDatei in /usr/share/xsessions/ein Skript erstellen /usr/local/bin. In meinem Beispiel werde ich zeigen, wie dies für ubuntu.desktopdie Unity DE gemacht wird, und LXDE als DE verwenden, zu dessen Verwendung wir unseren eingeschränkten Benutzer (eingeschränkten Benutzer) zwingen. Wenn wir uns LXDE.desktop ansehen, können wir sehen, dass der ExecBefehl ist /usr/bin/startlxdeund es keinen TryExecBefehl gibt. Wenn Sie öffnen ubuntu.desktop, sehen wir, dass der ExecBefehl ist gnome-session --session=ubuntuund der TryExecBefehl ist unity. Der TryExecBefehl ist genau das, wonach er sich anhört. Nach dem Ausführen des ExecBefehls wird versucht, den TryExecBefehl auszuführen. Wenn er jedoch fehlschlägt, stürzt er nicht ab.

Wenn wir nun die Befehle aus den .desktopDateien übernehmen, können wir unsere Skripte erstellen. Wir werden sie einsetzen /usr/share/bin. Wir müssen zwei machen, eine für die Execund eine für die TryExec. Wir machen so etwas:

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

Wir testen nur, ob die Person, die sich anmeldet, unser eingeschränkter Benutzer ist, und starten die entsprechende DE. Jetzt müssen wir sicherstellen, dass sie ausführbar sind:

sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh

Wir müssen jetzt unsere ändern ubuntu.desktop, damit unsere Skripte anstelle der tatsächlichen DEs aufgerufen werden. Kommentieren Sie die Zeilen Execund TryExecin der Datei aus und ersetzen Sie sie durch folgende:

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

Wiederholen Sie einfach den Vorgang für alle anderen DEs, die Sie möglicherweise haben. Wenn es TryExecfür ein DE kein gibt, muss auch kein detry.sh-Skript dafür erstellt werden, da LXDE kein a verwendet TryExec. Dies ist natürlich etwas hackig, und Sie sollten sicherstellen, dass Sie alle Dateien sichern, bevor Sie sie bearbeiten. Dies funktioniert jedoch, wenn Sie unbedingt sicherstellen müssen, dass sich ein Benutzer bei der richtigen DE anmeldet.

ehrwürdig
quelle
1
Zunächst einmal: Vielen Dank für Ihre ausführliche Antwort! Dies ist ein ziemlich listiger Ansatz. Aber wenn ich den letzten Teil richtig verstehe, wird der eingeschränkte Benutzer gezwungen, sich bei lxde anzumelden, unabhängig davon , welche Option er in lightdm gewählt hat . Aber es werden immer noch alle anderen Optionen angezeigt, die in / usr / share / xsessions / aufgeführt sind. Verstehe ich das richtig? In diesem Fall würde ich lieber Option 1 wählen. Es ist eine Schande, dass es keine benutzerspezifische Option zum Einrichten von Desktop-Umgebungssitzungen gibt. Das Entfernen unerwünschter xsessions aus einem Benutzerordner wäre sowohl praktisch als auch einfach.
FuzzyQ
1
Bitte. Ich habe es als Herausforderung verstanden und wollte mich mehr mit LightDM beschäftigen. Richtig, der Benutzer sieht immer noch alle anderen Optionen, es spielt nur keine Rolle, da er gezwungen sein wird, LXDE zu verwenden. Wie ich schon sagte, ist die .dmrc Datei dort benutzerspezifischen Vorgaben zu halten, aber ja, es ist keine integrierte Möglichkeit zu zwingen , einen Benutzer nur bestimmte DGs zu verwenden, oder zu beschränken, welche sie sehen / verwenden können. Es ist jeder oder niemand, ohne den Hack, den ich vorgestellt habe.
Reverendj1
1

Bei Debian Squeeze und Wheezy können Sie auch eine .xsessionrc mit einer einzelnen Zeile hinzufügen

export STARTUP = XXX

(wobei XXX Ihr erzwungenes Sitzungsskript ist, siehe Exec-Line oben) im Benutzer-Homedirectory, um einen bestimmten Sitzungstyp zu erzwingen, unabhängig davon, was der Benutzer ausgewählt hat.

Sollte auch unter Ubuntu funktionieren.

(Sehen Sie sich /etc/X11/Xsession.d/40x11-common_xsessionrc und 50x11-common_determine-startup an, um zu sehen, warum dies funktioniert.)

Peter
quelle
0

Die Antwort von Reverendj1 hat bei mir nicht funktioniert. Grund könnte sein, dass der in Exec = angegebene Wert nicht direkt ausgeführt, sondern als Argument an / etc / X11 / Xsession übergeben wird. (Quelle: https://askubuntu.com/a/857420/873016 )

Eine weitere Lösung für das Problem:
1. Sichern Sie alle / usr / share / xsessions / .desktop-Dateien.
2. Löschen Sie alle / usr / share / xsessions /
.desktop-Dateien.
3. Erstellen Sie nur /usr/share/xsessions/default.desktop mit

[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" ist ein Schlüsselwort für Xsession und schlägt die spezifische Sitzung im Benutzerverzeichnis nach.
4. Erstellen Sie nun für jeden Benutzernamen eine Datei /home/{username}/.xsession. Für eine "Kiosk-ähnliche" App sollte dies folgendermaßen aussehen:

#!/bin/bash

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

Wenn beispielsweise ein anderer Benutzer einen vollständigen Desktop-Manager starten darf, könnte dies folgendermaßen aussehen:

#!/bin/bash

exec icewm-session
  1. Stellen Sie sicher, dass die Datei ~ / .xsession ausführbar ist
sudo chmod +x ~/.xsession

Getestet auf Ubuntu 16.04 mit LightDM

Egodigitus
quelle