Wykryć, czy działa w wirtualnym terminalu?


12

Chciałbym AutoLogin aby tty1podczas logowania, a następnie użyć vlock, aby go zablokować.

Jak mogę wykryć w Bash, czy bieżący terminal jest terminalem wirtualnym konsoli (np. tty1), Dzięki czemu mogę umieścić vlocklinię .bash_profilei uruchomić ją tylko po zalogowaniu tty1?


1
Myślę, że powinieneś zmienić tytuł na „Wykryj, jeśli działa w terminalu wirtualnym”, ponieważ ttymoże być źle zrozumiany, aby wykryć, czy bieżąca powłoka jest podłączona do pseudo-terminala.
Joseph R.

@JosephR. Dzięki za wskazanie tego, naprawione
kiri

@JosephR: złe połączenie. Urządzenie pseudo terminal s  Ty nie TTY. O, aby przywrócić oryginalny tytuł.
Incnis Mrsi

Odpowiedzi:


14

Możesz użyć, ttyaby uzyskać nazwę bieżącego terminala wirtualnego, a następnie przetestować go za pomocą caseinstrukcji:

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

Co więcej, zamiast zakładać, że wszystkie powłoki logowania do terminala są ttys.
kiri

1
Nie trzeba wykluczać X: jeśli skrypt działa w emulatorze terminali w X, ttypokaże pseudoterminal emulatora terminala, a nie fizyczny terminal, na którym działa X.
Gilles „SO- przestań być zły”

5

Zasadniczo wystarczy po prostu przetestować STDIN (FD0):

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

OK, ponieważ .bash_profilewywoływane są w powłokach logowania, a normalne logowanie GUI nie ma terminala, więc jedyną powłoką logowania terminala powinien być tty. Dobre znalezisko
kiri

1
Gdyby ten fragment był zawarty w większym skrypcie, którego przekierowano standardowe wejście z pliku, zgłosiłby, że żaden TTY nie jest dostępny, nawet jeśli jest uruchamiany z VT.
Joseph R.

1
@JosephR Prawidłowo. Wartością jest często „ cronlub”, ataby uniknąć awarii, gdy skrypty przyjmują interaktywne dane wejściowe.
JRFerguson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.