Wie kann ich eine Bildschirmsitzung pro Benutzer haben und sie als Anmelde-Shell festlegen?

Wie kann ich eine Bildschirmsitzung pro Benutzer haben und sie als Anmelde-Shell festlegen?

Wie kann ich screen so einstellen, dass es automatisch ausgeführt wird, wenn sich ein Benutzer über eine CLI-Schnittstelle anmeldet? Wenn für diesen Benutzer bereits eine screen-Sitzung ausgeführt wird, möchte ich, dass alle neuen Anmeldungen an diese screen-Sitzung angehängt werden. Es wäre wirklich schön, wenn beim Anhängen an die screen-Sitzung für jede neue Anmeldung ein neues Fenster erstellt würde.

Antwort1

Stellen Sie zunächst sicher, dass die Benutzer, für die Sie dies tun möchten, ~/.screenrcdie Zeile

shell /bin/bash

(oder welche andere Shell Ihr Benutzer derzeit auch verwendet). Wenn Sie diese Einstellung nicht festgelegt haben und die Shell wie wir ändern, kann sich der Benutzer nicht anmelden. Sie könnten auch erwägen, die Meldung beim Startbildschirm mit dieser Zeile zu entfernen

startup_message off

Ok, jetzt erstellen wir ein ausführbares Skript, das sich an die erste bereits laufende Bildschirmsitzung anhängt, wenn sie beendet wird, und wenn noch keine läuft, startet es eine. In einem Terminal ausführen

sudo nano /bin/screenlogin.sh

Geben Sie die folgenden beiden Zeilen ein:

#!/bin/bash
screen -x -r || screen

Drücken Sie Ctrl xund dann, yum die Datei zu speichern.

sudo chmod 755 /bin/screenlogin.sh

Führen Sie es abschließend chshmit dem Zielbenutzer aus und melden Sie sich /bin/screenlogin.shbei entsprechender Aufforderung bei der Shell an.

Antwort2

Beim Ausführen screen -xRwird grundsätzlich dasselbe bewirkt wie beim Laufen screen -xr || screen.

Das Problem ist, dass Sie meines Wissens keine Flags an eine Login-Shell übergeben können. Außerdem würde die Verwendung einer Nicht-Shell wie screen als Login-Shell wahrscheinlich Dinge wie SFTP beschädigen.

Wir legen also Bash als unsere Login-Shell fest. Dann fügen wir am Ende von .bashrc (einer Datei, die Bash ausführt, wenn Sie sie starten) Code hinzu, der Screen ausführt. Screen führt dann die Shell aus, die in angegeben ist .screenrc.

Wir werden dafür sorgen, dass dieser Befehl nur unter einer besonderen Bedingung ausgeführt wird: Nur wenn die aktuell ausgeführte Kopie von Bash nicht (möglicherweise indirekt) von einer anderen Kopie von Bash gestartet wurde. Dadurch wird sichergestellt, dass, wenn Ihr Benutzer Bash als Shell haben möchte und Screen Bash darin startet, der Benutzer keine Explosion von Bash innerhalb von Screen innerhalb von Bash innerhalb von Screen innerhalb von Bash bekommt, bis der Computer nicht mehr genügend Arbeitsspeicher hat.

Ändern Sie zunächst die Shell zu /bin/bash, indem Sie ausführen chsh, dann Ihr Passwort eingeben, es eintippen /bin/bashund die Eingabetaste drücken.

Bearbeiten Sie als Nächstes die versteckte .bashrcDatei in Ihrem Home-Ordner und fügen Sie am Ende Folgendes hinzu:

if [ ${SHLVL} -eq 1 ]; then
    ((SHLVL+=1)); export SHLVL
    exec screen -xR
fi

.screenrcBearbeiten Sie nun die versteckte Datei im Home-Ordner (erstellen Sie sie, wenn sie nicht beendet wird) . Fügen Sie die folgenden Einstellungen hinzu oder bearbeiten Sie sie:

shell /bin/zsh
startup_message off

(Wenn Sie eine andere Shell als Zsh möchten, können Sie diese natürlich einfach stattdessen verwenden. Es sollte sogar mit Bash funktionieren.)

verwandte Informationen