Ich bin neu bei Linux und habe die folgende Version von Ubuntu als VirtualBox VM eingerichtet mitdieser Prozess:
ubuntu-20.04.3-desktop-amd64.iso
Das erste erstellte Konto war ein Administratorkonto. Ich habe es installiert xsel
und überprüft, ob es funktioniert. Dann habe ich ein Nicht-Administratorkonto erstellt und su
mich mit angemeldet su - non-admin-account
. An diesem Punkt xsel
beschwerte sich:
xsel: Can't open display: (null)
: Inappropriate ioctl for device
Was muss ich tun, um den Zugriff xsel
nach su
der Anmeldung bei einem anderen Konto möglich zu machen?
Derzeit bin ich nicht daran interessiert, Apps zu starten, die ihre eigenen Client-Fenster starten, wenn su
sie mit dem Nicht-Administrator-Konto angemeldet sind. Ich möchte nur eine einfache Weiterleitung vonStandardausgangin die Zwischenablage, damit ich es in Vim oder der Bash-Befehlszeile beispielsweise mit Umschalt+Einfg echo dog | xsel -ib
oder abrufen kann echo dog | xsel -ip
.
Mein aktueller Plan ist, zu schreiben oder umzuleiten (sagen wir), /tmp/tmp.txt
um Text zwischen einem Benutzer zu übergeben, der sich über einen Anmeldebildschirm angemeldet hat, und einem, der su
angemeldet war. Ich bin an das Verhalten von Cygwin gewöhnt, bei dem die Zwischenablage unabhängig davon freigegeben wird, unter welchem Konto ein Terminal gestartet wird.
Fehlerbehebung
su
Wenn ich mich beim Nicht-Administrator-Konto und beim Administrator-Konto anmelde, tritt dasselbe Verhalten auf . xsel
Funktioniert beim Nicht-Administrator-Konto, bei dem ich mich anmelde, aber nicht beim Administrator-Konto, bei dem ich su
mich anmelde.
Funktioniert im Wesentlichen xsel
nicht nach einem su
.
Wie in den Kommentaren beschrieben, habe ich mirAntworten auf dieses Problem. Ich erkenne die Problembeschreibung nicht, da die Fehlermeldungen sehr unterschiedlich sind. Jemand, der anhand von Fehlermeldungen sucht, wird diese Frage also nicht erkennen. Außerdem verstehe ich die Antworten nicht. Der Teil, der auf meine Lösung zutreffen könnte, war xhost +localhost
, aber es funktionierte nicht, weil die Syntax falsch ist, zumindest für die Ubuntu-Version, die ich verwende. Ich poste die Syntax, dietutArbeite an meiner Antwort unten.
Ich denke, bevor die oben zitierte Seite auch nur annähernd jemanden informieren kann, muss man wissen, dass das Problem darin besteht, dass einem Konto die Berechtigung zum Zugriff auf den X-Server fehlt. Wenn Sie beispielsweise bisher Cygwins X-Windows verwendet haben, würden Sie das wahrscheinlich nicht vermuten, da das Problem dort nicht auftritt.
Antwort1
Du kannst den ... benutzenpam_xauth
Authentifizierungsmodul zum Weiterleiten von X11-Sitzungscookies über su
Aufrufe hinweg, ohne Ihren X-Server allgemein für diese Benutzer zu öffnen.
Dies ermöglicht auch eine detaillierte Kontrolle darüber, welche Benutzer über Konfigurationsdateien in ihren $HOME/.xauth/
Verzeichnissen Anmeldeinformationen an welche anderen Benutzer weiterleiten können.
Antwort2
Bezogen aufAbonnieren's Kommentar, ich fanddiese Seitezur Verwendung xhost
. Anhand dieser Informationen habe ich herausgefunden, dass Folgendes funktioniert:
# Log into admin-username from the login screen,
# then issue:
$ xhost +SI:localuser:nonadmin-username
localuser:nonadmin-username being added to access control
list.
$ xhost
SI:localuser:nonadmin-username
SI:localuser:admin-username
$ su - nonadmin-username
# Enter password when prompted
# Match DISPLAY to its value in the admin account
$ export DISPLAY=:0
$ ls | xsel -ip # Use PRIMARY selection e.g. X-windows mouse highlighting
$ ls | xsel -ib # Use CLIPBOARD buffer e.g. Windows's Ctrl+C/X/V
$ exit # Exit the "su" session
# Paste then works in admin account as expected.
# To test the PRIMARY selection:
$ cat # In admin account
# Paste using middle mouse button or Shift+Ins
Ctrl+D to end input into "cat"
Eine nützliche Alternative zum Hinzufügen einzelner Benutzer ist xhost +local:
, wodurch jeder lokale Benutzer Clientfenster öffnen kann. Dies setzt voraus, dass Sie jedem vertrauen, der an der Maschine angemeldet ist. Daher sollte dies nur in kontrollierten Umgebungen, wie z. B. Einzelbenutzermaschinen, durchgeführt werden.
In vielen Umgebungen kann die PRIMARY-Auswahl auch in [G]Vim aus dem Register eingefügt werden *
.
Ebenso kann der CLIPBOARD-Puffer häufig in [G]Vim aus dem Register +
oder aus jeder anderen App, die Strg+V verwendet, eingefügt werden.