48

I prefer to use US international with dead keys keyboard layout in order to get Latin diacritics for characters like é, è, à, etc in Libreoffice in Linux Mint.

On this layout characters like ´, `, ^, " are dead keys (clicked once do nothing) that can be pressed before other letters in order to get these signs.

' with a gives á
` with a gives à
" with a gives ä

etc, but

' with c gives ć

Can I get ç in this layout in Linux?


In Windows I do not have 'US international with dead keys' but only 'US international' which seems identical, only there dead-key ' with c gives ç (in both MSOffice and LibreOffice), which I think is the expected behavior.


I had imagined this might be a all-around system-level problem in Linux. But this keyboard layout (mentioned in a comment by user BramMooij under this question) can produce in Linux the cedilla under C (Ç) with AltGr-c.

9 Answers9

46

The key combination for ç in US international with dead keys layout was there all along, but unlike the other Latin diacritics it does not involve a dead key:

AltGr+,=ç

AltGr+Shift+,=Ç

enter image description here

44

It's because the cedilla module isn't loaded by default when the locale is set to en, so you have to change the configuration files for gtk to add them:

1. Edit configuration files:

sudo vim /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache

sudo vim /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules.cache

On both, find the lines starting with "cedilla" "Cedilla" and add :en to the line. Something like this:

"cedilla" "Cedilla" "gtk30" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa:en"

2. Change the Compose file:

sudo sed -i /usr/share/X11/locale/en_US.UTF-8/Compose -e 's/ć/ç/g' -e 's/Ć/Ç/g'

3. Instruct the system to load the cedilla module:

Add those lines to /etc/environment:

GTK_IM_MODULE=cedilla
QT_IM_MODULE=cedilla

Reboot and you are done.

ThoriumBR
  • 1,022
8

If you like me don't have a AltGr button in your keyboard, try the following:

Right Alt + ,

Gabriel Ziegler
  • 193
  • 1
  • 6
3

I have created a simple bash script following @ThoriumBR answer. This way, whenever there's an update to your system and you'll lose that config, you can just run the script again.

The script is idempotent, so feel free to run as many time as you want, the result won't change.

#!/usr/bin/env bash

Setting vars up

COMPOSE_FILE='/usr/share/X11/locale/en_US.UTF-8/Compose' GTK2_FILE='/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules.cache' GTK3_FILE='/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache' ENV_FILE='/etc/environment'

Backing up files

sudo cp ${COMPOSE_FILE} ${COMPOSE_FILE}.bak sudo cp ${GTK2_FILE} ${GTK2_FILE}.bak sudo cp ${GTK3_FILE} ${GTK3_FILE}.bak

Fixing cedilla in Compose

sudo sed --in-place -e 's/ć/ç/g' ${COMPOSE_FILE} sudo sed --in-place -e 's/Ć/Ç/g' ${COMPOSE_FILE}

Fixing cedilla in GTK files

GTK_FILE_SEARCH_FOR='^"cedilla".:en' GTK_FILE_SED_EXP='s/^("cedilla".:wa)/\1:en/g'

grep -q ${GTK_FILE_SEARCH_FOR} ${GTK2_FILE} [ $? -eq 1 ] && sudo sed --in-place -e ${GTK_FILE_SED_EXP} ${GTK2_FILE} grep -q ${GTK_FILE_SEARCH_FOR} ${GTK3_FILE} [ $? -eq 1 ] && sudo sed --in-place -e ${GTK_FILE_SED_EXP} ${GTK3_FILE}

Fixing cedilla in environment file

ENV_FILE_GTK_LINE='GTK_IM_MODULE=cedilla' ENV_FILE_QT_LINE='QT_IM_MODULE=cedilla'

grep -q ${ENV_FILE_GTK_LINE} ${ENV_FILE} [ $? -eq 1 ] && echo ${ENV_FILE_GTK_LINE} | sudo tee -a ${ENV_FILE} > /dev/null grep -q ${ENV_FILE_QT_LINE} ${ENV_FILE} [ $? -eq 1 ] && echo ${ENV_FILE_QT_LINE} | sudo tee -a ${ENV_FILE} > /dev/null

Then you can save it to a file such as fix-cedilla.sh and run it with bash fix-cedilla.sh. Or you can mark that file as executable with chmod +x fix-cedilla.sh and run it with ./fix-cedilla.sh.

You can/should also add it to your dotfiles repo (example of mine) so next time you (re)install your OS it's handy in a known place ;-)

Luiz
  • 31
3

Just open a terminal and execute the following to add the intended behaviour to '+c and '+C

~/.XCompose

echo '<dead_acute> <c>     : "ç"' >>~/.XCompose
echo '<dead_acute> <C>     : "Ç"' >>~/.XCompose

Reboot or alternatively restart GNome with ALT+F2 then type r+ENTER.

0

You can use a combination of uim as input manager with a XCompose file to reproduce the Microsoft Windows behavior for English international keyboards.

I've wrote some instructions for several distros (and even a Ubuntu package): https://github.com/raelgc/win_us_intl/

0

I'm on fedora 40 with gnome 46 and the option 2 just works for me

https://github.com/raelgc/win_us_intl/

in resume: Alternative 2: Try with ibus Modern versions of ibus appears to properly handle the .XCompose file.

So, download the file and place it at your home folder (and logout/login) should be enough to get proper latin accents:

cd ~

wget https://raw.githubusercontent.com/raelgc/win_us_intl/master/.XCompose

Logout and login again.

It works fine, but I still have the same weird side effect of Firefox deleting first accent on Whatsapp web under Xorg (no issues in Wayland).

so.. ç Ç á é à :)

0

This method given in ThoriumBR's answer broke other ibus layouts for me. I need both the cedilla on the international layout and the Hangul characters on the Korean (Hangul) layout, applying this method broke the Hangul input method.

This alternative method enables to add the cedilla without breaking Hangul support :

Alternative solution 3 (user space)

1. Create a `~/.XCompose` file with the following content:
 # UTF-8 (Unicode) compose sequences

Overrides C acute with Ccedilla:

<dead_acute> <C> : "Ç" "Ccedilla" <dead_acute> <c> : "ç" "ccedilla"

2. Run the following command:
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule': <'ibus'>}"
3. Restart the user session.

Source

0

I had the same problem in Ubuntu24.04 with X11 on Gnome.

The following did the trick, for English (US, intl. with dead keys) keyboard.

  1. Set ibus as input method

    im-config -n ibus
    
  2. Set in ~/.xprofile

    export XMODIFIERS=@im=ibus
    export GTK_IM_MODULE=ibus
    export QT_IM_MODULE=ibus
    export XCOMPOSEFILE=$HOME/.XCompose
    
  3. Add in ~/.XCompose

    <dead_acute> <c>  : "ç"  U00E7
    <dead_acute> <C>  : "Ç"  U00C7
    
  4. Log out and back in, or reboot

This overrides the X11 Compose behavior, so you can type ' + c and get ç

It works in terminal, Chrome and Firefox.