Promjeni jezik LightDM Greetera

Objavljeno: Pon, 20 Mar 2017
Ažurirano: Pet, 13 Okt 2017

Pod: Linux

Tagovi: lightdm

Prevodi: en

Jezik koji koristim na kompjuteru je engleski. To obuhvata jezik teksta u svim programima i okruženju. Za sve ostalo, kao što je datum, jedinice za mjeru, specifičnosti brojeva, adresa i slično koristim bosanski.

Na Linux distribucijama je jednostavno prilagoditi jezike i standarde. Za to se koriste lokali (locales, ne znam tačni prevod na naš) i promjenjljive okruženja (environment variables, isti slučaj). Moje postavke izgledaju ovako:

LANG=en_US.utf8
LC_CTYPE=bs_BA.UTF-8
LC_NUMERIC=bs_BA.UTF-8
LC_TIME=bs_BA.UTF-8
LC_COLLATE=bs_BA.UTF-8
LC_MONETARY=bs_BA.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=bs_BA.UTF-8
LC_NAME=bs_BA.UTF-8
LC_ADDRESS=bs_BA.UTF-8
LC_TELEPHONE=bs_BA.UTF-8
LC_MEASUREMENT=bs_BA.UTF-8
LC_IDENTIFICATION=bs_BA.UTF-8
LC_ALL=

Koristim engleski za LANG (i LANGUAGE koji nije naveden jer ga nasljeđuje od LANG postavke) i za LC_MESSAGES. Sve ostalo koristi bosanske postavke, tj bs_BA lokal.

Globalno, odnosno sistemski mi je eksportovano samo LANG=en_US.UTF-8 u /etc/locale.conf fajlu. Znači da je sve na engleskom, osim gdje je navedeno drugačije. Nakon toga, svaki korisnik ima svoj locale.conf fajl gdje je podešeno za njega. Fajl se nalazi u ~/.config/locale.conf, a osim njega imam iste vrijednosti eksportovane u Openbox konfiguracionom fajlu u ~/.config/openbox/environment za grafičko okruženje (postavke iz locale.conf se ne pikaju pod Xorgom, ne znam još zašto).

LightDM problem

Kompjutere koriste i moji roditelji. Nemaju nikakvih problema, čak je sve i lakše jer je prevedeno na domaći jezik. Oni umjesto LANG=en_US.UTF-8 koriste LANG=bs_BA.UTF-8. Također je za njih eksportovano i LANGUAGE=bs:hr:sr. GNU gettext programi uzimaju u obzir tu promjenjljivu za postavke o jezicima, a prednost naspram korištenju samo LANG= je to što je moguće zadati i alternative u slučaju da prevod na jednom jeziku nije dostupan tako da se jezici odvoje sa dvotačkom (:).

LightDMov greeter je međutim ostao na engleskom, jer je engleski globalno namješten. Htio sam da im potpuno pružim prevedeno okruženje, tako da je i LightDMov greeter trebao biti na domaćem.

Prvo hakasto rješenje je bilo da kopiram bosanski prevod (koji je za vrijeme pisanja ovoga nepotpun), prevedem do kraja i stavim pod engleski u /usr/share/locale/en/.... Međutim sjetio sam se boljeg rješenja.

Kako sad?

Napomena: ovo je stari, lošiji način. Vidi dole za bolje i čistije riješenje

LightDM pokreće systemd servis. Systemd je u stanju da proslijedi promjenjljive okruženja servisima, i to je nama pogodno. Naime programi se mogu privremeno pokrenuti sa određenim okruženjem, npr. LANG=de_DE.UTF-8 gimp. To će GIMP pokrenuti na njemačkom jeziku, bez da mijenja ikakve trajne postavke.

Isti princip se može primjeniti i za LightDM, samo što se mora dodati systemd servisu. To možemo pomoću service fajla. Najbolji način je da se napravi globalni override.

Možete ručno napraviti direktorij za servis koji želite promjeniti pod /etc/systemd/system/ zajedno sa fajlom ili koristiti systemctl edit servis.

Nama treba ENVIRONMENT= postavka. U nju unesemo željenu promjenjljivu. Ovako na kraju izgleda moj fajl:

$ cat /etc/systemd/system/lightdm.service.d/override.conf 
[Service]
Environment=
Environment="LANG=bs_BA.UTF-8"

Dva puta je navedeno, a prvi red je prazan. Nisam potpuno siguran, mislim da radi i bez praznog reda. Prazni red ima efekat da "očisti" prijašnju vrijednost, a u našem slučaju ne može naškoditi (makar ne prema znaju tokom pisanja ovog članka).

Kako sad, ali stvarno?

Ukratko: samo pokrenuti LightDM-GTK-Greeter sa drugim jezikom. Razlog tome je što ako pokrećemo LightDM, sesija naslijedi environment variable i to može dovesti to problema naknadno.

LightDM saznaje koji su mu greeteri dostupni preko desktop fajlova, obično u /usr/share/xgreeters. Kopirao sam fajl od LightDM-GTK-Greetera i izmjenio Exec= liniju. Koristio sam env program koji pokreće programe u modifikovanom okruženju, tj. sa drugim environment variables. Nakon toga potrebno je samo LightDMu reći da koristi naš novi greeter navođenjem toga u njegovom konfiguracionom fajlu sa greeter-session opcijom.

[Desktop Entry]
Name=LightDM GTK+ Greeter
Comment=This runs the GTK+ greeter, it should only be run from LightDM
Exec=env LANGUAGE=bs lightdm-gtk-greeter
Type=Application
X-Ubuntu-Gettext-Domain=lightdm

Vjerovatno je env bespotreban i radilo bi i jednostavno sa Exec=LANGUAGE=bs lightdm-gtk-greeter, ali sam prelijen da isprobam, jer ovako već radi.

Arch Linux korisnici mogu koristiti moj PKGBUILD da instaliraju modifikovani desktop fajl.