Voici le problème: je veux pouvoir discerner si mon terminal est capable d'unicode décent ou non, afin d'utiliser certains caractères ou non, tout comme les regards, qui utilise parfois des couleurs et d'autres soulignent.
La motivation vient du fait que dans tout type de terminal virtuel, je reçois des polices décentes, mais je comprends que la console Linux de base a un jeu de caractères de 256 ou 512 symboles simultanés, vous ne pouvez donc pas vous attendre à une prise en charge complète des polices.
Au début, je pensais que je pouvais utiliser $TERM
ou tty, mais voici le hic: j'utilise aussi byobu, $TERM
tout comme "screen.linux". La sortie de tty n'est pas non plus très révélatrice: /dev/pts/<some number>
en termes "réels" et virtuels.
$BYOBU_TTY
n'est pas une aide non plus, car par exemple cela peut être /dev/tty1
et lorsque la session est ouverte en Ctrl+ Alt+ F1les caractères ne s'affichent pas mais lors de l'attachement à la même session à partir d'un terme X, ils s'affichent correctement et $BYOBU_TTY
ne changent toujours pas. De plus, j'aimerais pouvoir détecter cela sans présumer que byobu est là ou non.
De plus, les paramètres régionaux s'affichent dans tous les cas en_US.UTF-8
Pourtant, les regards (pour nommer un outil particulier que je vois détecter), même à l'intérieur de byobu, utilisent des sorties différentes en fonction du terminal que j'attache à la session byobu.
J'ai des problèmes avec Google, car terminal et tty semblent des termes de recherche trop courants. Tout au plus j'arrive à des solutions recommandant $TERM
ou tty.
La véritable question d'OP est: quelles valeurs Unicode la console Linux prend-elle en charge et peut-elle être détectée pendant l'exécution
screen
. En principe, on peut le faire en récupérant la carte Unicode pour la console.L'
kbd
arborescence source contientgetunimap
(et sa page de manuel). La page de manuel indique quece qui n'est pas tout à fait vrai.
setfont
a une option qui fait à peu près la même chose:Les différences:
setfont
écrit dans un fichier, tandis qu'ilgetunimap
écrit dans la sortie standardgetunimap
montre le caractère qui serait mappé, en tant que commentaire.Par exemple:
contre
Si vous êtes en cours d'exécution
screen
(ou par exemple en cours d'exécutionxterm
et non sur la console), vous obtiendrez une erreur d'autorisations que vous pouvez contourner en utilisantsudo
.S'il m'arrive de savoir quelle police a été chargée, je peux vérifier cela (sans autorisations spéciales) en utilisant
psfgettable
, par exemple,et voir les données de mappage qui
setfont
seraient utilisées pour charger la police (avec le mappage Unicode):Les deux
getunimap
etsetfont
donnent les données non triées, tandis quepsfgettable
semble être trié (ainsi que la combinaison de lignes pour les valeurs Unicode qui correspondent au même glyphe). Il y a donc des différences, mais l'information est accessible.Lectures complémentaires (illustrant pourquoi vous ne pouvez pas utiliser
showconsolefont
pour résoudre ce problème):la source
sudo
n'est pas un obstacle pour mon cas d'utilisation.setfont
ne produit rien (ne crée pas le fichier donné ni ne génère d'erreur) dans les terminaux virtuels, mais fonctionne dans les terminaux réels comme prévu. C'est dans Ubuntu 16.04Je suis tombé sur cette question alors que j'essayais d'accomplir la même chose, mais je ne voulais rien laisser à l'écran et lui faire définir une variable, alors j'ai mis ce qui suit dans un script shell que je source:
la source