Oto problem: chcę być w stanie rozpoznać, czy mój terminal jest w stanie przyzwoicie unicode, czy nie, aby użyć niektórych znaków, czy nie, podobnie jak spojrzenia, które czasami używają kolorów, a inne podkreślają.
Motywacja wynika z tego, że na dowolnym terminalu wirtualnym dostaję przyzwoite czcionki, ale rozumiem, że podstawowa konsola Linux ma zestaw znaków 256 lub 512 symultanicznych symboli, więc nie można oczekiwać pełnej obsługi czcionek.
Na początku myślałem, że mogę użyć $TERM
lub tty, ale oto haczyk: ja też używam byobu, więc $TERM
zawsze jest to „screen.linux”. Wyniki tty również nie są zbyt wymowne: /dev/pts/<some number>
zarówno w kategoriach „rzeczywistych”, jak i wirtualnych.
$BYOBU_TTY
też nie jest pomocne, ponieważ np. może być /dev/tty1
i kiedy sesja jest otwarta w Ctrl+ Alt+, F1znaki nie pokazują się, ale podczas dołączania do tej samej sesji z jakiegoś X terminu, pokazują się poprawnie i nadal $BYOBU_TTY
się nie zmieniają. Poza tym chciałbym móc to wykryć bez zakładania, że byobu jest, czy nie.
Ponadto ustawienia regionalne pokazują się we wszystkich przypadkach en_US.UTF-8
Jednak w jakiś sposób spogląda (aby wymienić konkretne narzędzie, które to wykrywam), nawet wewnątrz byobu, używa różnych danych wyjściowych w zależności od terminala, który podłączam do sesji byobu.
Mam problem z Google, ponieważ terminale i tty wydają się zbyt częstymi wyszukiwanymi hasłami. Co najwyżej docieram do rozwiązań polecających $TERM
lub tty.
Rzeczywistym pytaniem OP jest: jakie wartości Unicode obsługuje konsola Linux i czy można je wykryć podczas działania
screen
. Zasadniczo można to zrobić, pobierając mapę konsoli dla Unicode.kbd
Drzewo źródłowy zawieragetunimap
(i jego strona podręcznika). Strona podręcznika to mówico nie jest do końca prawdą.
setfont
ma opcję, która robi mniej więcej to samo:Różnice:
setfont
zapisuje do pliku, agetunimap
zapisuje na standardowe wyjściegetunimap
pokazuje znak, który zostałby zmapowany, jako komentarz.Na przykład:
przeciw
Jeśli działasz
screen
(lub na przykład działasz,xterm
ale nie na konsoli), pojawi się błąd uprawnień, z którym możesz się obejśćsudo
.Jeśli się dowiem, która czcionka została załadowana, mogę to sprawdzić (bez specjalnych uprawnień) za pomocą
psfgettable
np.i zobacz dane mapowania, które
setfont
byłyby użyte do załadowania czcionki (z mapowaniem Unicode):Obie
getunimap
isetfont
dają dane nieposortowane, podczas gdypsfgettable
wydaje się być posortowane (a także łączą linie dla wartości Unicode, które są mapowane na ten sam glif). Istnieją więc różnice, ale informacje są dostępne.Dalsza lektura (ilustrująca, dlaczego nie możesz użyć
showconsolefont
do rozwiązania tego problemu):źródło
sudo
nie stanowi przeszkody dla mojego przypadku użycia.setfont
nic nie wyświetla (nie tworzy podanego pliku ani nie wyświetla błędu) w wirtualnych terminalach, ale działa w rzeczywistych terminalach zgodnie z oczekiwaniami. To jest w Ubuntu 16.04Natknąłem się na to pytanie, gdy próbowałem osiągnąć to samo, ale nie chciałem pozostawiać niczego na ekranie i ustawić zmienną, więc umieściłem następujące polecenie w skrypcie powłoki, który otrzymuję:
źródło