Using non-latin language on Librem 5


To what degree Will Librem 5 enable me the choice of
switching to non-latin input language by default ?


AFAIK, code it yourself!
You should be able to combined the onscreen keyboard with ibus to input non Latin characters, but that’s very hacky.


The Librem 5 will provide you near infinite choice by default in that you can do anything you choose with the device. There are no known intentional software limitations and all indications are there will be no restrictions placed on your ability to modify the software.

What I believe you are actually trying to figure out is whether or not Pure OS on the Librem 5 will support non-latin language on launch. From what I’ve gathered this is unlikely; not due to a lack of desire to provide the choice but due to lack of manpower.

You could choose to install another OS that does support non-latin languages on the Librem 5 and there is no indication Purism will do anything to prevent this, though the implication is that for support they will only be officially supporting their OS on the device which may be a point of contention for some people in some situations; but is, I’m quite sure, an effort to keep their support as streamlined as is feasible.

Hopefully I was able to accurately under what you meant and provided some useful feedback.





There’s currently an ability to support arbitrary Unicode input in squeekboard

Documenting in progress, for now take a look at the nb.yaml file if you’d like to contribute. Russian support should be straightforward, something like Korean a bit difficult, and Chinese or Japanese should be doable, if impractical.


If it is still workable, there is also


@dcz I’ve started an attempt at creating a Russian keyboard layout based on nb.yaml like you suggested. I think the huge refactoring work you did to allow unicode symbols really does make it a lot easier and more intuitive to add new layouts compared to what the old XML format files looked like!

    - "й ц у к е н г ш щ з х"
    - "ф ы в а п р о л д ж э"
    - "Shift_L я ч с м и т ь б ю BackSpace"
    - "show_numbers preferences         space        period    Return"

One thing I wasn’t able to determine though is when do you need to define buttons (like is done for many of the symbol keys) versus just entering the unicode symbol in the layout? Do you actually need to define a button for every non-latin symbol?


I checked and there is only nb numbers and us. I am interested in Greek (el) support. should I go ahead and create an el.yaml or this job is undertaken by someone already? And how to commit it?

By the way, what is the default font on L5? (trying to understand if the default font supports Greek and to what extent).


Yay, first contribution incoming!

Buttons need to be added in the list only if something is overridden from the default for the button. The default is:

  • outline “default”
  • action “submit label”
  • label as provided
  • no icon
  • keysym for libxkbcommon automatically derived

In general, the button needs to be there if:

  • it’s not a letter (action)
  • it’s got a fancy shape or sometimes color (outline)
  • it has an icon
  • it causes problems when creating a keymap (keysym)

The nb.yaml keyboard hasn’t been updated for a while, and that’s why it lists all symbols in the buttons list.


I’m not aware of anyone else trying to do that.

You can either submit a merge request, or file an issue and include the file, or send me the file directly.

It’s Cantarell at the moment. But please don’t pay attention - if the font in use prevents any characters, it’s a bug that I promise to fix.


I will try to create an el file for Greek and get back to you.

But it is unfortunate (for me) that Cantarell does not have Greek support. It has also received a lot of criticism. I hope it would be easy to change the font. Of course there are tons of fonts available. I consider the Go fonts created by well known and very respected font designers, Professor Bigelow and Holmes, a much much better choice. Both for legibility and for international support. License is also free.


In nb.yaml I do not see a way to type accents. Say you want to type alpha (α) and alphatonos (ά). On android you keep the alpha pressed and then a popup window appears offering you to type alphatonos (usually more options are available on this popup such as numbers). So, is a similar mechanism supported? I do not think there is space to have both non-accented and accented letters on the default layout.


More on keyboard: how does the language switch work? Some androids have a dedicated button on the keyboard. Others do not have this but you swap the space button to switch. I ask because I do not see a dedicated button for languages in your us.yaml


I need aswell a way to type accents in my mother tongue (Spanish), a kind of long press menu like the Android one:

a > á
e > é
i > í
o > ó
u - ú
A > Á
E > É
I > Í
O > Ó
U > Ú

With that and this modifications should be enough for the Spanish (from Spain) keyboard.

        - "q w e r t y u i o p"
        - "a s d f g h j k l ñ"
        - "Shift_L   z x c v b n m  BackSpace"
        - "show_numbers preferences         space        period Return"
        - "Q W E R T Y U I O P"
        - "A S D F G H J K L Ñ"
        - "Shift_L   Z X C V B N M  BackSpace"
        - "show_numbers preferences         space        period Return"
        - "1 2 3 4 5 6 7 8 9 0"
        - "@ # € % & - _ + ( )"
        - "show_symbols   , \" ' « » colon ; ¡ ! ¿ ?  BackSpace"
        - "show_letters preferences         space        period Return"
        - "~ ` | · √ π τ ÷ × ¶"
        - "© ® £ $ ¥ ^ ° * { }"
        - "show_numbers_from_symbols   \\ / < > = [ ]  BackSpace"
        - "show_letters preferences         space        period Return"

I just added the ñ Ñ letters, the latin quitation marks « », ¿ and ¡ and swap the symbol for the dollar one.

Librem 5 available languages

No single font is going to cover all my needs: latin, cyrylic and japanese symbols. Plus all sorts of accents, I like having people’s names in their exact preferred spelling.


There’s no special way to type accents. You can put them on dedicated keys in a different view. You can have as many views as you want, so you will never run out of space. Make sure that there are enough buttons with the action “change view” and that they make sense.

Long press is in plans, but not the top priority.

The language can be switched from settings. The “preferences” button will open a dedicated switcher in the near future.

Did you check whether there are fallbacks? I have to admit I haven’t tested that.


OK, I think I have the Greek keyboard ready. A couple of questions before submitting:

I have used 11 symbols for some lines as in nb.yaml. The us.yaml has 10 maximum. Is this OK or i should try to have max 10;

I solved the issue with accents adding a new view. This is fine and I prefer it to the long press. But for switching to English it is important for Greek users. So I added the us keyboard in more views in my file el.yaml with some buttons/actions to switch back and forth to Greek. Is this OK?

Finally, I can not test the file. Is it possible for you to check at least that the syntax has no errors? (I guess it will not compile if it has errors).



I think if you can’t test it, then it’s too early to submit the layout; others won’t be able to use it either. Where did you get stuck? Did you try running the testing instructions from the file?

If you did, then you can place the keyboard in the directory ~/.local/share/squeekboard/keyboards/, this will override the provided one (there isn’t one yet). Then use the settings app to select Greek as your system layout and confirm by:

gsettings get org.gnome.desktop.input-sources sources
gsettings get org.gnome.desktop.input-sources current

After you do that, you’ll get a good feel of whether the 11th button is placed correctly.

Oh, and the application will print things on the console if anything’s wrong. It will try not to crash even if something goes wrong. No one wants the input method to crash.

When it comes to an embedded US view, I’d rather not accept this upstream, especially as I’m working on the switcher right now. You’re free to have it as an override on your own system.


Sorry, it did not cross my mind that I have to run in an emulator the whole L5-phone just to test a simple text layout.

OK, so I guess I should start from here:



You can do that, but I use something different for development: (sorry, I directed you to instead).

If you use this method, all you need is phoc, and it will turn into a window on your desktop. But there are probably problems with that, so unless you wish to help me better document the testing procedure, it’s better to use the emulator from the page you linked.