Kann ich ein Bash-Timeout nur für virtuelle Konsolen festlegen (Strg + Alt + {f1-f6})?

7

Ich weiß, dass ich eine TMOUTVariable festlegen kann, um eine Bash-Sitzung nach einer bestimmten Zeit der Inaktivität automatisch zu beenden. Ich möchte dies jedoch nur auf meine 6 integrierten virtuellen Konsolen anwenden, auf die über ctrl+ alt+ { F1... F6} zugegriffen wird .

Ich benutze fast immer eine Terminal-App, wenn ich ein Terminal öffnen möchte. Wenn ich meinen Computer verlasse, sperre ich den Bildschirm, wodurch niemand auf diese Terminals zugreifen kann. Deshalb möchte ich keine Auszeit haben.

In seltenen Fällen verwende ich jedoch eine meiner virtuellen Konsolen, um an meinem Computer zu arbeiten. Normalerweise liegt es daran, dass meine Gnome-Hauptsitzung eingefroren oder anderweitig unbrauchbar ist. Ich töte die beleidigende App und wechsle dann zu meiner Hauptsitzung zurück.

Darüber hinaus habe ich einige Male vergessen, meine virtuelle Konsole zu verlassen, wenn ich meine Gnome-Sitzung wiederhergestellt habe. Daher ist mein Computer völlig ungeschützt, wenn ich weggehe, da das Sperren des Bildschirms auf Gnome nur die GUI sperrt. Ein Benutzer könnte zu einer virtuellen Konsole wechseln und meinen Gnome-Sperrbildschirm töten oder auf andere Weise mit meinem Computer herumspielen.

Kann ich einen Zeitlimitwert nur für die integrierten virtuellen Konsolen festlegen und gleichzeitig zulassen, dass eine Terminal-App-Sitzung auf unbestimmte Zeit inaktiv bleibt?

Stephen Schrauger
quelle

Antworten:

9

Sie können überprüfen, ob Sie in einem grafischen Terminal ausgeführt werden, und nur festlegen, TMOUTob dies nicht der Fall ist. Ein einfacher Weg, dies zu tun, ist der ttyBefehl:

   tty - print the file name of the terminal connected to standard input

Bei Ausführung von einem GUI-Terminalemulator:

$ tty
/dev/pts/5

Bei Ausführung über eine virtuelle Konsole:

$ tty
/dev/tty2

Wenn Sie diese Zeilen zu Ihrer hinzufügen, ~/.profilesollte Ihre Bash-Sitzung nach zehn Minuten beendet sein:

tty | grep tty >/dev/null && TMOUT=600
terdon
quelle
Sie möchten nicht exportieren TMOUT . readDies würde sich auf die Integration aller Bash- oder Ksh93-Skripte auswirken, die von Ihrer Anmeldesitzung aus gestartet wurden.
Stéphane Chazelas
@ StéphaneChazelas ja, ist das nicht was das OP will? Wenn sie möchten, dass ihre Sitzung nach 10 Minuten beendet wird, möchten sie vermutlich auch, dass ihre Skripte ebenfalls beendet werden. Sie werden schließlich getötet, wenn die Sitzung endet.
Terdon
TMOUT on readführt nicht zum Beenden von Skripten, sondern readzum Fehlschlagen nach einer Zeitüberschreitung, wodurch Skripte auf jede mögliche Weise fehlschlagen können. Es ist unwahrscheinlich, dass es zu Problemen kommt, da es selten vorkommt read, dass es 10 Minuten lang hängen bleibt, aber es ist immer noch falsch, es zu exportieren TMOUT(beachten Sie auch, dass ein Skript nach dem Export TMOUT=1alle Skripte betrifft , die aus diesem Skript heraus aufgerufen werden, anstatt nur das Skript selbst ).
Stéphane Chazelas
@ StéphaneChazelas OK. Einfach einzustellen wäre in Ordnung und sollte trotzdem das tun, was das OP braucht, oder?
Terdon
Ja, aber dann würde ich es wahrscheinlich tun, ~/.bashrcdamit es alle interaktiven Shells betrifft, nicht nur die Anmeldeshells (und die Annahme ~/.profileoder ~/.bash_profileQuellen ~/.bashrc, die erforderlich sind, um diesen Bash-Fehler zu umgehen). tty | grep -q 'tty[0-9]'um zu vermeiden, ttyUSB3 oder ttyS1 in Betracht zu ziehen.
Stéphane Chazelas
1

Dies ist ein guter Fall für das pam_env.soPAM-Modul. Anmeldungen für virtuelle Konsolen verwenden das loginProgramm, sodass Sie /etc/pam.d/logineine Zeile wie die folgende öffnen und hinzufügen können :

session  required  pam_env.so  readenv=1 envfile=/etc/vc-environment user_readenv=0

Mit der zugehörigen neuen Datei /etc/vc-environment:

TMOUT=600

Zwei Vorteile bei der Verwendung von PAM:

  • Dies gilt für alle Benutzer, die sich bei der virtuellen Konsole anmelden (obwohl dies nicht verhindert, dass sie TMOUTspäter geändert werden ).
  • Das Zeitlimit kann auch auf andere spezifische Dienste angewendet werden, z sudo.

Lesen Sie hier für Details zu diesem Modul.

Billyw
quelle
Sie möchten nicht exportieren TMOUT . readDies würde sich auf die Integration aller Bash- oder Ksh93-Skripte auswirken, die von Ihrer Anmeldesitzung aus gestartet wurden.
Stéphane Chazelas
Die Sitzungsverwaltung von PAM erfolgt, bevor der Dienst überhaupt bereitgestellt wird. Daher glaube ich nicht, dass hier der Export von Variablen einer Shell ins Spiel kommt. Meine Tests haben gezeigt, dass das Festlegen von TMOUT auf diese Weise die integrierte readFunktion unabhängig vom Vorhandensein eines Schlüsselworts vom Typ Export in der Umgebungsdatei beeinflusst.
Billyw
1
Entschuldigung, das war ein direktes Kopieren und Einfügen von meinem Kommentar zu @ terdons Antwort. Ich hätte es bearbeiten sollen. Die Idee ist jedoch die gleiche. TMOUT sollte nicht sein, aber in der Umgebung wie bei anderen Shells wirken sich spezielle Variablen wie IFS, CDPATH oder FIGNORE nicht nur auf Ihre interaktive Shell aus, sondern auch auf das Verhalten von Skripten.
Stéphane Chazelas
1

Die TMOUT-Lösung hat mir nie gefallen. Erstens, weil es nur funktioniert, wenn Sie Ihre Sitzung an der Eingabeaufforderung verlassen. Wenn Sie es in Vim oder sogar an einer sudo-Passwortabfrage lassen, tritt keine Zeitüberschreitung auf. Und zweitens möchte ich nicht, dass die Sitzung geschlossen wird, sondern dass sie gesperrt wird, genau wie es die grafischen Umgebungen tun.

Der GNU-Bildschirm kann nach einer Leerlaufzeit gesperrt werden, daher habe ich Folgendes getan. Ganz am Anfang habe ~/.bashrcich Folgendes hinzugefügt:

if [ "$TERM" = "linux" ] && tty | egrep -q '^/dev/tty[[:digit:]]+$'
then
    exec screen -c ~/.ttyscreenrc
fi

Dies execist wichtig, da es sicherstellt, dass screenBash ersetzt wird, und wenn es beendet wird, wird die TTY-Sitzung geschlossen.

Und ~/.ttyscreenrcich habe folgendes gesagt:

startup_message off
idle 180 lockscreen

So überspringen Sie den Begrüßungsbildschirm des Bildschirms und sperren ihn nach 3 Minuten Inaktivität.

ateijelo
quelle