O IBus também é muito bom. Eu criei um para uma linguagem para o IBus. Eu usei a extensão ibus-m17n que me permitiu escrever um arquivo mim
e foi feito. Em casos simples, você apenas grava mapeamentos de um pressionamento de tecla no caractere unicode a ser inserido. Mas é muito mais poderoso.
Veja alguns layouts implementados na fonte do m17n-contrib. É em algum dialeto de lisp, mas você não precisa necessariamente saber o idioma, eu apenas consegui mexer e fazer as coisas. E aqui está a documentação