Aqui está o problema: quero discernir se meu terminal é capaz de unicode decente ou não, a fim de usar alguns caracteres ou não, assim como os relances, que às vezes usa cores e outros sublinhados.
A motivação surge porque em qualquer tipo de terminal virtual recebo fontes decentes, mas entendo que o console básico do Linux possui um conjunto de caracteres de 256 ou 512 símbolos simultâneos, portanto você não pode esperar um suporte completo à fonte.
No começo eu pensei que poderia usar $TERM
ou tty, mas aqui está o problema: estou usando byobu também, então $TERM
sempre é "screen.linux". A saída de tty também não é muito reveladora: /dev/pts/<some number>
em termos "reais" e virtuais.
$BYOBU_TTY
também não ajuda, porque, por exemplo, pode ser /dev/tty1
e quando a sessão é aberta em Ctrl+ Alt+, F1os caracteres não são exibidos, mas ao serem anexados à mesma sessão a partir de um termo X, eles são exibidos corretamente e ainda $BYOBU_TTY
não são alterados. Além disso, eu gostaria de poder detectar isso sem presumir que o byobu esteja lá ou não.
Além disso, a localidade é exibida em todos os casos en_US.UTF-8
No entanto, de alguma forma, olha (para citar uma ferramenta específica que vejo detectando isso), mesmo dentro do byobu, usa saída diferente dependendo do terminal que estou anexando à sessão do byobu.
Estou tendo problemas com o google porque terminal e tty parecem termos de pesquisa muito comuns. No máximo, chego a soluções recomendando $TERM
ou tty.
A pergunta real do OP é: quais valores Unicode o console Linux suporta e quais podem ser detectados durante a execução
screen
. Em princípio, pode-se fazer isso recuperando o mapa Unicode para o console.A
kbd
árvore de origem contémgetunimap
(e sua página de manual). A página do manual diz queo que não é exatamente verdade.
setfont
tem uma opção que faz aproximadamente a mesma coisa:As diferenças:
setfont
grava em um arquivo, enquantogetunimap
grava na saída padrãogetunimap
mostra o caractere que seria mapeado, como um comentário.Por exemplo:
versus
Se você estiver executando
screen
(ou, por exemplo, executandoxterm
e não no console), você receberá um erro de permissão, que poderá ser solucionado usandosudo
.Se eu souber qual fonte foi carregada, posso verificar isso (sem permissões especiais) usando
psfgettable
, por exemplo,e veja os dados de mapeamento que
setfont
seriam usados para carregar a fonte (com o mapeamento Unicode):Ambos
getunimap
esetfont
dar os dados não separadas, enquanto quepsfgettable
parece ser classificados (bem como uma combinação de linhas de valores de Unicode que mapeiam para o mesmo glifo). Portanto, existem diferenças, mas a informação está acessível.Leitura adicional (ilustrando por que você não pode usar
showconsolefont
para resolver esse problema):fonte
sudo
não é obstáculo para o meu caso de uso.setfont
não gera nada (não cria o arquivo especificado nem gera um erro) nos terminais virtuais, mas funciona nos terminais reais conforme o esperado. Isto está no Ubuntu 16.04Me deparei com essa pergunta enquanto tentava realizar a mesma coisa, mas não queria deixar nada na tela e definir uma variável, então coloquei o seguinte em um script de shell que forneço:
fonte