Estou usando aplicativos X em uma conexão SSH para alguma máquina. Quando executo um aplicativo X, digamos, xclock
para simplificar, recebo uma mensagem do console dizendo:
Warning: Missing charsets in String to FontSet conversion
... mas o aplicativo é executado. Minhas localidades são:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Agora, encontrei esta sugestão antiga para apenas definir export LC_ALL=C
. E - isso funciona, a mensagem de erro desaparece. No entanto, eu realmente não quero mudar minha localidade assim!
Existe algo que eu possa fazer para evitar o erro e manter minha localidade?
Informação adicional:
- O servidor X é o servidor X integrado do MobaXterm no Windows.
- máquina remota é SLES GNU/Linux 11 (por SUSE).
Você está correto, você não quer mudar sua localidade assim! Encontrei sugestões semelhantes e escolhi a toca do coelho.
A única variável de localidade que você pode alterar é
LC_CTYPE=C
(essas são as configurações de classificação de caracteres , consulte a seção POSIX 7, Localidade para obter detalhes).O principal problema aqui, acredito, é que os antigos programas X têm problemas menores relacionados a fontes com sistemas contemporâneos multi-byte/multi-localidade.
Minha própria localidade, em um desktop X Org (Mobaterm usa X Org sob o capô) é
en_IE.utf
(mapeado para o arquivoen_US.UTF-8/XLC_LOCALE
via/usr/share/X11/locale/locale.dir
). Dentro desse arquivo XLC_LOCALE existem definições de conjunto de fontes e conjuntos de caracteres , e é a presença de alguns deles que (tendem a) acionar os avisos (especificamente para codificações cirílicas e asiáticas que eu não uso e não têm grande cobertura de fonte de ).Eu recebo vários erros de alguns programas, por exemplo
xfig
:fsN
Comentar várias entradas indesejadascsN
corrigirá isso (cada índice N define um par fontset/charset correspondente, mantenha esse emparelhamento observando que cada par tem aproximadamente 200 linhas de diferença). Isso pode afetar a apresentação de certos textos. Ou definirLC_CTYPE=C
antes de iniciarxfig
remove todos os avisos.Os avisos são emitidos de
XtCvtStringToFontSet()
(libXt), como resultado doXCreateFontSet()
relatório de conjuntos de caracteres ausentes (ou seja, conjuntos de caracteres usados/exigidos pela localidade, mas não encontrados na(s) fonte(s) correspondente(s) à especificação solicitada).XCreateFontSet()
retorna a lista de conjuntos de caracteres ausentes, mas libXt não fornece detalhes da solicitação ou conjuntos de caracteres ausentes para ajudá-lo a localizá-los. (Eu trapaceei usandoLD_PRELOAD
e um invólucro.so
paraXCreateFontSet()
encontrar os culpados, veja abaixo.)O verdadeiro problema então é que um fontspec (por exemplo "- -helvetica-medium-r-normal--16- - - - - - - ") é verificado para todas as codificações definidas no arquivo
XLC_LOCALE
e, se algumas não puderem ser encontrado, então você verá esses avisos. Se nenhum for encontrado, você verá "Aviso: não é possível carregar nenhum conjunto de fontes utilizável" também.Algumas correções então:
LC_CTYPE=C
(ou outra codificação "simples", por exemploen_US
) para programas errantesVocê pode precisar das duas correções finais, pois o aviso pode ser emitido se qualquer uma das fontes padrão não corresponder a uma codificação no momento da verificação, mesmo que uma fonte subsequente seja suficiente.
Um problema final é que alguns fontspecs de fallback podem continuar a acionar o problema. Especificamente, o padrão Xt codificado de:
pode falhar completamente acionando os mesmos avisos. Alguns testes rápidos indicam que fontspecs que não contêm uma família (incluindo apenas um único "*") podem não corresponder a nada, mesmo que sejam esperadas correspondências, ou seja, com:
E adicionar um ", *" à direita como um curinga completo pode quebrar uma especificação de fonte que funcionaria de outra forma. Observado no X Org 1.18.3.
Eu uso isso no meu
.Xdefaults
:o que parece manter a maioria das coisas silenciosas para mim, sem necessidade de
XLC_LOCALE
alterações. Esse fallback consegue corresponder a todas as codificações solicitadas na mistura de fontes que de alguma forma acretei ...Aqui está o wrapper muito simples (com verificação mínima de erros) que usei para ajudar a rastrear o que está sendo solicitado (já que geralmente é definido apenas na fonte do aplicativo) e o que não está sendo encontrado. Testado em x86_64 Slackware, outras distros/sistemas podem precisar de pequenos ajustes.
então
para executá-lo a partir do diretório em que você o compilou.