mojira.dev
MC-30704

Unsupported keys with foreign keyboard on Linux

I'm using a french keyboard (azerty layout). Now that the hotbar can finally be used thanks to the new keybinding menu, I changed controls to fit my keyboard. But some keys are displayed as "NONE" in the menu and do not work correctly in game.

&, é,", (, è, ç are reported as "NONE"
', -, _ work fine

When pressing one of the NONE key, the game switch to the last slot (bound to ç). I guess the game consider all these keys to be the same and use the last action bound to this key.

Some other keys have the same issue but I cannot be exhaustive :
), $, *, ^, ù, !, <
^ is a dead key and must be typed twice.

Linked issues

Comments 17

Ludwig Von Hellsing

I have the same problem with a Belgian (azerty) keyboard on Linux Ubuntu (not tested on Windows).

When we use the number keys above the letters, by default, symbols are printed instead of numbers (it's a normal behaviour for azerty keyboards).
To actually print a number, we have to press SHIFT (it works in Minecraft, but also triggers the action assigned to SHIFT).

The symbols for these keys on a Belgian keyboard are (from 1 to 0) : &, é, ", ', (, §, è, !, ç, à

Except for the apostrophe, trying to use these keys in the configuration menu returns "NONE".
Except for the §, all these keys work in the chat.

Clément Vuchener

This seems related with this issue from LWJGL : http://lwjgl.org/forum/index.php?topic=3950.0

Is this still a concern in the current Minecraft version 1.7.2 / Launcher version 1.3.4 or later? If so, please update the affected versions in order to best aid Mojang ensuring bugs are still valid in the latest releases/pre-releases.

Janne Mareike Koschinski

I can confirm this problem using Minecraft 1.7.4 / Launcher version 1.3.7 but not with the french/belgian keyboard, instead I've got this problem on a german keyboard with the keys:
ö, ä, ü, #, +, ß, ', ^ and <.

I tested this manually, for these keys LWJGL doesn't output any KeyCode, and I even investigated LWJGL's java source:
The problem is neither in Minecraft nor in the Java-part of LWJGL, instead it has to be anywhere between the Kernel and LWJGL's C parts.

This is IMHO a bug in minecraft that also affects the windows version.

The lwjgl bugtracker tells why: https://github.com/LWJGL/lwjgl/issues/59

Edit: Bug still present in Minecraft 1.7.4 with launcher 1.3.7.

7 more comments

14w34c looks good here on Linux with german umlauts. It is now possible to bind those keys and the displayed name is correct.
Thanks! (Fun fact: there is another minecraft linux bug where LWJGL has been blamed initially: MC-55045)

Clément Vuchener

14w34c fixes it for my french keyboard. Key names are correct (it is better than Windows on that point, now).

There is still a problem with the dead key ^: I have to press it twice, both in the option menu and in game.

I have no idea what you mean with 'dead key ^:'.

Right now if there was no eventKey given by LWJGL we use the character code generated. These are absolutely not unique (in other words, they might change when you hold modifier keys) but it's about the best that can be done.

Clément Vuchener

A dead key is a key that does not write a character, but it modifies the next character. For example typing ^, then e, writes ê.
I don't really know lwjgl works, but I think it should be handled with a key code rather than a character code. Like the modifier keys (ctrl, alt, shift, ...) do not have associated characters but work fine.

Also, while in game, pressing ^ change the behaviour of the next non-modifier key :
– for actions that last for the time the key is pressed (like moving), the action starts with a delay (waiting for a repeat event ?).
– for other actions (quick slot, inventory, ...), the action is completely ignored.

It may come from a limitation of lwjgl as I have seen a lot of software having issues with this key.

Clément Vuchener

It looks like a lwjgl bug. I wrote a short test program :

import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

public class KeyboardTest {
	public static void main (String[] args) {
		try {
			Display.setDisplayMode (new DisplayMode (800, 600));
			Display.create ();
		}
		catch (LWJGLException e) {
			e.printStackTrace ();
			System.exit (0);
		}

		while (!Display.isCloseRequested ()) {
			while (Keyboard.next ()) {
				String state;
				if (Keyboard.getEventKeyState ())
					state = "pressed";
				else
					state = "released";
				int key = Keyboard.getEventKey ();
				System.out.println (Keyboard.getKeyName (key) + " (" + key + ") " + state);
			}
			Display.update ();
		}

		Display.destroy ();
	}
}

Pressing ^ twice, gives the output:

CIRCUMFLEX (144) released
NONE (0) pressed
CIRCUMFLEX (144) released

Edit: This method outputs NONE key for the key I reported in the first message. Now, I understand what you mean by "no eventKey given by LWJGL".
Edit2: I posted a bug report on the LWJGL forum : http://lwjgl.org/forum/index.php/topic,5477.msg28937.html

Clément Vuchener

Erik Broes

Community Consensus

keyboard, linux

Minecraft 13w36b, Minecraft 1.7.2, Minecraft 1.7.4, Minecraft 14w08a, Minecraft 1.7.5

Minecraft 14w34c

Retrieved