UTF-8, screen ja irssi

Tämä opas kertoo UTF-8 -merkistön täydellisestä käyttöönotosta Linux-etäkoneella. Ohje soveltuu mm. Jyväskylän yliopiston wildeast.cc.jyu.fi-koneelle.

UTF-8 -koodaus mahdollistaa latinalaista aakkostoa ja muutamaa erikoismerkkiä laajemman merkistön. Esimerkiksi japanin kielen ja matemaattisten symbolien esittäminen eksaktisti onnistuu. UTF-8 on eräs Unicode-merkistön koodaustapa. Huomaa, että UTF-8, UTF-16 jne. pystyvät esittämään täsmälleen saman merkkivalikoiman, kyse on vain siitä, miten merkkikoodit koodataan tavuiksi.

Kuten muidenkin merkistöjen osalta, niin tässäkin täytyy molempien viestinnän päiden käyttää samaa merkistöä, jotta tullaan ymmärretyksi. On myös täysin eri asia, mitä merkistöä ohjelma käyttää protokollatasolla ja käyttäjän kanssa kommunikoidessa. Esimerkiksi, kun irssissä asettaa jonkin kanavan /recode-komennolla vaikkapa UTF-8:lle, se merkitsee vain että irssi kääntää omat merkistönsä UTF-8:ksi lähettäessä.

Pääte, jossa irssi pyörii screenissä on merkistöherkkä ainakin seuraavasti:

  • Käyttäjän pään pääte, pääte-emulaattori (esim. konsole) tai pääteohjelma (esim. putty)
  • Palvelimen shellin locale-asetuksissa määritelty viestien merkistö
  • Screenin sisällä käytössä oleva merkistö
  • Käytössä olevan ohjelman (esim. irssi) käsitys käytettävästä merkistöstä

Kuten helposti huomataan, homman voi tyriä ainakin 4 eri paikassa. Tarkoituksena on siis saada päästä varpaisiin UTF-8 käyttöön. Lähdetään liikkeelle käyttäjän asetuksista kohti palvelimen asetuksia. Mikään vaiheista ei vaadi minkään järjestelmän pääkäyttäjän oikeuksia. Tosin tämä vaatii valitettavasti irssin uudelleenkäynnistystä. Voimia.

Käyttäjän merkistö

UTF-8 on molempiin suuntiin yhteensopiva ASCII-merkistön kanssa. Se tarkoittaa sitä, että ASCII tulkittuna UTF-8:na ei aiheuta tulkintavirheitä eikä myöskään toisin päin. ASCII-merkistö kattaa 128 ”ensimmäistä” merkkiä. Siispä säätövaiheessa ei tule ongelmia, vaikka välillä merkistöt tulkitaankin väärin, koska unix-komennot ja tarvittavien tiedostojen nimet sisältävät vain ASCII-merkkejä.

Vaihda siis käyttämäsi päätteen merkistö.

  • Puttyssä asetuksen voi tallentaa tietyn yhteyden profiiliin. Seikkaile valikoissa ja etsi merkistöasetus ja aseta se UTF-8:ksi. Tallenna
  • KDE:n Konsolessa, kuten muutamassa muussakin pääteohjelmissa on mahdollista tehdä oma istunto (session) tiettyä ssh-yhteyttä varten, johon voi tallentaa mukaan myös merkistötiedon.

Palvelimen locale

Sisäänkirjautessasi login-järjestelmä asettaa useita ympäristömuuttujia. Tietoja ovat esimerkiksi käytettävä viestien kieli ja kielen koodaamisessa käytetty merkistö. Näitä nimitetään localeiksi ja eri tarkoitusta varten voi olla eri localeja. Esimerkiksi kieli voi olla eri kuin maa-asetus. Tähän en syvällisemmin mene tässä, tyydyn neuvomaan kaikkien vaihtamisen kerralla.

Kirjaudu sisään järjestelmään siten, että käytössäsi on UTF-8-merkistö päätteessäsi. Tarkista käytössä oleva merkistö komentamalla locale. Mikäli tulosteessa näkyy fi_FI, C tai jokin muu, jossa UTF-8 ei ole mainittu, tarkoittaa se, että locale täytyy vaihtaa.

Tarkista käytettävissä olevat localet komentamalla locale -a. Tarkista, että listassa on jokin UTF-8-locale, mieluiten fi_FI.UTF-8 tai en_GB.utf8. Valitse mitä haluat käyttää, tässä tapauksessa neuvon käyttäen suomenkielistä UTF-8-localea nimeltään fi_FI.UTF-8.

Localejen asettaminen riippuu käyttäjän käyttämästä komentotulkista. Yleisimmin käytössä on bash, mutta yliopiston palvelimilla oletuksena on käytössä tcsh (the C shell). Komentotulkin voi vaihtaa yliopiston salasananvaihtosivulta osoitteesta https://salasana.jyu.fi, chsh-komennolla sitä et pysty vaihtamaan. Käytössäsi olevan komentotulkin näet komennolla echo $SHELL.

Mikäli käytät bash-shelliä: Muokkaa tiedostoa ~/.bashrc ja lisää sen loppuun rivi export LC_ALL=fi_FI.utf8. Muokkaaminen onnistuu nano-ohjelmalla tai yksinkertaisesti komentamalla echo "export LC_ALL=fi_FI.utf8" >>~/.bashrc.

Mikäli käytät tcsh-shelliä: Muokkaa tiedostoa ~/.cshrc ja lisää sen loppuun rivi setenv LC_ALL fi_FI.utf8. Muokkaaminen onnistuu nano-ohjelmalla tai yksinkertaisesti komentamalla echo "setenv LC_ALL fi_FI.utf8" >>~/.cshrc.

Kirjaudu ulos ja uudelleen sisään. Tarkista sen jälkeen komennolla locale, näkyykö toivomasi locale luettelossa. Mikäli näkyy, kaikki on kunnossa. Muutoin tarkista, ettei copypasten jäljiltä ole jäänyt pisteitä tms. loppuun.

Screenin locale

Nyt on aika ottaa backlogit talteen ja sammuttaa irssi ja sen alla oleva screen. Tarkista, että screen katosi varmasti komentamalla screen -ls.

Käynnistä screen uudestaan. Palvelimen asetuksista riippuen saattaa olla tarpeen käynnistää screen -U-parametriä käyttäen. Voit kokeilla merkistön toimivuutta vaikka pastettamalla tästä selaimesta päätteeseen seuraavan japaninkielisen tervehdyksen: こんにちは。 Mikäli ruudulle tulostuu jotakin muuta kuin selaimesi ruudulla, etenkin yli 6 virheellistä merkkiä, tiedät asetusten olevan vielä vinossa. Mikäli japaninkielistä fonttia ei ole asennettu, ruudulla näkyy 6 kysymysmerkkiä tai laatikkoa. Sekin merkitsee toimivuutta, koska fontin puuttuminen ei haittaa, ellet tarvitse kyseisiä merkkejä.

Mikäli screen toimii odotetusti, voit käynnistää sen joko uudelleen suoraan irssiin tai komentaa näkyvään komentokehotteeseen irssi.

Mikäli tarvitsit -U -vipusta screeniä käynnistettäessä, kannattaa seuraavan palvelimen boottauksen varalta jo asettaa defutf8 on tiedostoon ~/.screenrc, jolloin ei tarvitse käyttää -U -vipusta.

Merkistöasetukset irssissä

Irssi käyttää arvaamista merkistöjen tunnistamiseen, koska IRC-protokolla ei tarjoa tapaa merkistötiedon välittämiseen. Kun recode-toiminto on käytössä, yrittää irssi ensin tulkita saamaansa viestiä UTF-8 -merkistön mukaisesti. Koska kaikki tavujonot eivät ole sallittuja UTF-8 -esityksiä (tästä enemmän Wikipediassa), tällöin irssi pyrkii tulkitsemaan viestin merkistöllä, joka on määritetty muuttujaan recode_fallback. Tässä oletuksena on CP1252, koska se on usein Windowsin IRC-clienttien suosiossa ja ei eroa näkyvien merkkien osalta vakiintuneemmasta ISO-8859-1 -merkistöstä.

Käynnistettyäsi irssin uudelleen, tarkista seuraavien muuttujien tila komentamalla /set recode ja /set term_charset.

recode_autodetect_utf8 = ON recode_fallback = CP1252 recode = ON recode_out_default_charset = UTF-8 recode_transliterate = ON term_charset = UTF-8

 

Suosittelen näitä asetuksia, mutta jos sinua enemmän kiinnostaa, mitä nämä tarkoittavat, kannattaa lukea seikkaperäinen englanninkielinen ohje. Mikäli vaikkapa term_charset on sinulla väärin, sen voi korjata komentamalla /set term_charset UTF-8. Mikäli muutit asetuksia, tallenna muutokset komentamalla /save.

Merkistöt eri kanavilla

Mikäli teit asetukset ylläolevan mukaisesti, lähetät oletuksena kirjoittaessasi merkistöä UTF-8, joka on tätä nykyä maailman yleisin merkistö. Se sisältää tuen käytännössä jokaiselle maailman kielelle. Joillakin kanavilla saattaa kuitenkin olla yhä käytössä käytöstä poistuva ISO-8859-1- tai ISO-8859-15 -merkistö. Tässä tapauksessa voit määritellä kyseisen kanavan merkistön erikseenn. Tämä onnistuu komennolla: /recode add #vanhakanava ISO-8859-15.

Kun client ei osaa UTF-8:aa

Lopuksi sitten hiukan ohjeita, miten selviytyä tilanteissa, jossa client ei osaa kuin jonkin toisen merkistön. Esimerkiksi jotkin päätekoneet hallitsevat ainoastaan ISO-8859-1 -merkistön, eikä asetusta voi muuttaa mistään. Tällöin on turvauduttava screenin oivaan merkistömuunnoksien tukeen.

Screeniä kiinnitettäessä (attach) screen tutkii, onko screenin välissä käytössä eri merkistöt. Tämän tiedon se vakoilee päätteensä locale-asetuksista. Siten, kun localet asetetaan samaksi kuin päätekoneessa, screen huolehtii tarvittavista muunnoksista. Tällöin mm. japani ja matemaattiset symbolit putoavat matkalla, mutta ainakin ääkköset näkyvät oikein.

Voit tehdä localen vaihtoa varten aliaksen. Lisää jälleen etäkoneelle ~/.bashrc:n perään alias 'isoterm=export LC_ALL=fi_FI'. Kirjauduttuasi etänä UTF-8 -vammaiselta koneelta riittää, että ensimmäiseksi komennoksesi annat isoterm. Kun kiinnität screenin, merkistö näkyy muunnettuna.