Linux console (Türkçe)/Keyboard configuration (Türkçe)

From ArchWiki

Klavye eşlemeleri (tuş eşlemi), konsol yazı tipleri ve Linux konsolu için konsol eşlemeleri, metin konsolunu yönetmek için birçok düşük seviyeli araç da sağlayan systemd'nin bir bağımlılığı olan kbd paketi tarafından sağlanır. Buna ek olarak, systemd hem konsol hem de Xorg için sistem yerelleştirmesini ve klavye düzeni ayarlarını kontrol edebilen localectl aracını sağlar.

Klavye ayarlarını görüntüleme

Geçerli klavye ayarlarını görüntülemek için localectl status komutunu kullanabilirsiniz.

Tuş eşlemleri

Tuş eşlem dosyaları /usr/share/kbd/keymaps/ dizininde saklanır. Genellikle bir tuş eşlem dosyası bir klavye düzenine karşılık gelir (ortak parçaları paylaşmak için include kullanılabilir ve bir tuş eşlem dosyası geçiş için kullanılan bazı tuş kombinasyonlarıyla birden fazla düzen içerebilir). Daha fazla ayrıntı için keymaps(5) bölümüne bakınız.

Tuş eşlemlerini listeleme

Konsol tuş eşlemlerinin adlandırma kuralları biraz keyfidir, ancak genellikle şunlara dayanır:

  • Dil kodları: dil kodunun ülke koduyla aynı olduğu durumlarda (örneğin Almanca için de veya Fransızca için fr).
  • Ülke kodları: farklı ülkelerde aynı dilin varyasyonlarının kullanıldığı yerler (örneğin, Birleşik Krallık İngilizcesi için uk veya Amerika Birleşik Devletleri İngilizcesi için us); ülke kodlarının bir listesi #Resmi olarak atanmış kod unsurları burada da bulunabilir.
  • Klavye düzenleri: düzeninin belirli bir ülke veya dille ilgili olmadığı durumlarda (örneğin Dvorak klavye düzeni için dvorak).

Mevcut tüm tuş eşlemlerinin bir listesi için şu komutu kullanın:

$ localectl list-keymaps

Bir tuş eşlemini aramak için, arama yerine dilinizin, ülkenizin veya düzeninizin kodunu yazarak aşağıdaki komutu kullanın:

$ localectl list-keymaps | grep -i arama

Alternatif olarak, find kullanarak:

$ find /usr/share/kbd/keymaps/ -type f -name "*search_term*"

Loadkeys komutu

Sadece mevcut oturum için bir tuş eşlemi ayarlamak mümkündür. Bu, farklı tuş eşlemelerini test etmek, sorunları çözmek vb. için kullanışlıdır. Bu amaçla loadkeys aracı kullanılır:

# loadkeys tuş eşlemi

Detaylar için loadkeys(1) bölümüne bakabilirsiniz. Aynı araç /etc/vconsole.conf içinde ayarlanan tuş eşlemini yüklerken systemd-vconsole-setup(8) tarafından olarak kullanılır.

Kalıcı yapılandırma

Başlangıçta systemd tarafından okunan /etc/vconsole.conf dosyasında kalıcı bir tuş eşlemi ayarlanabilir. Tuş eşlemini belirtmek için KEYMAP değişkeni kullanılır. Değişken boşsa veya ayarlanmamışsa, us tuş eşlemi varsayılan değer olarak kullanılır. Tüm seçenekler için vconsole.conf(5) bölümüne bakabilirsiniz. Örneğin:

/etc/vconsole.conf
KEYMAP=uk

Kolaylık için, konsol tuş eşlemini ayarlamak için localectl kullanılabilir. Bu, /etc/vconsole.conf içindeki KEYMAP değişkenini değiştirecek ve aynı zamanda mevcut oturum için tuş eşlemini ayarlayacaktır:

# localectl set-keymap --no-convert tuş eşlemi

--no-convert seçeneği localectl'in Xorg tuşeşlemini otomatik olarak en yakın eşleşmeye değiştirmesini önlemek için kullanılır. Daha fazla bilgi için localectl(1) bölümüne bakabilirsiniz.

Eğer gerekirse, /etc/vconsole.conf yapılandırma dosyasındaki tuş eşlemi, mkinitcpio sayesinde tuş eşlemi erken kullanıcı alanı sırasında yüklenebilir.

İpucu:
  • Özel tuş eşleminizi /usr/share/kbd/keymaps/ dışında bir yere kaydettiyseniz, vconsole.conf yapılandırma dosyasına özel tuş eşleminizin tam yolunu veya yukarıdaki localectl komutunu kullanırken belirtmelisiniz.
  • /etc/vconsole.conf içindeki XKB* değişkenleri Xorg'un klavye yapılandırması içindir. Fakat ne loadkeys ne de Xorg bu değişkenleri kullanmayı desteklemiyor. Bakınız: [1]

Özel bir tuş eşlemi oluşturma

Konsolu kullanırken, belirli bir karakteri yazdırmak için kısayol tuşlarını kullanabilirsiniz. Ayrıca bir dizi karakteri ve bazı çıkış dizilerini de yazdırabiliriz. Böylece, bir komutu oluşturan karakter dizisini ve ardından yeni bir satır için bir çıkış karakterini yazdırırsak, bu komut çalıştırılacaktır.

Bunu yapmanın bir yolu tuş eşlem dosyasını düzenlemektir. Ancak, ait olduğu paket her güncellendiğinde yeniden yazılacağından, bu dosyayı düzenlemeniz önerilmez. Mevcut tuş eşlemini kişisel bir tuş eşlemi ile birleştirmek daha iyidir. Bunu loadkeys komutu ile yapabilirsiniz.

İlk olarak, bir tuş eşlem dosyası oluşturun.Bu tuş eşlem dosyası herhangi bir yerde olabilir, ancak bir yol /usr/local dizinini taklit etmektir:/usr/local/share/kbd/keymaps dizinini oluşturun, ardından /usr/local/share/kbd/keymaps/personal.map dosyasını düzenleyin.

Bir not olarak, bir kişisel tuş eşleminin, varsayılan tuş eşlemi tarafından zaten işlenen tuşların davranışını yeniden tanımlamak için de yararlı olduğunu belirtmek gerekir. loadkeys ile yüklendiğinde, varsayılan tuş eşlemindeki yönergeler yeni yönergelerle çakıştığında değiştirilecek ve aksi takdirde korunacaktır. Bu şekilde, kişisel tuş eşleminde yalnızca tuş eşlemindeki değişiklikler belirtilmelidir.

İpucu:
  • Ayrıca /usr/share/kbd/keymaps/ dizininde bulunan bir tuş eşlemini de düzenleyebilirsiniz. Tuş eşlemleri .map.gz ile biter. Örneğin us.map.gz Amerikan tuş eşlemidir. Tuş eşlemini /usr/local/share/kbd/keymaps/personal.map.gz dizinine kopyalayın ve gunzip komutunu çalıştırın.
  • Özel tuş eşlemi /etc/vconsole.conf içinde ayarlanarak kalıcı hale getirilebilir. mkinitcpio.conf yapılandırma dosyasının HOOKS kısmında eğer keymap yerine sd-vconsole kullanıyorsanız, özel tuş eşlem dosyanızı /usr/share/kbd/keymaps/ içine yerleştirebilirsiniz. Bu şekilde /usr/share/kbd/keymaps'deki bağımlılıklar mkinitcpio tarafından otomatik olarak ramdisk imajına eklenecektir. Öte yandan, özel tuş eşlem dosyanızı /usr/local/ altına yerleştirirseniz, bağımlılıklarını mkinitcpio.conf yapılandırma dosyasının içindeki FILES kısmında belirtmeniz gerekecektir.

Adding directives

Two kinds of directives are required in this personal keymap. First of all, the keycode directives, which matches the format seen in the default keymaps. These directives associate a keycode with a keysym. Keysyms represent keyboard actions. The actions available include outputting character codes or character sequences, switching consoles or keymaps, booting the machine, and many other actions. The full currently active keymap can be obtained with

# dumpkeys -l

Most keysyms are intuitive. For example, to set key 112 to output an 'e', the directive will be:

keycode 112  = e

To set key 112 to output a euro symbol, the directive will be:

keycode 112 = euro

Some keysym are not immediately connected to a keyboard actions. In particular, the keysyms prefixed by a capital F and one to three digits (F1-F246) constituting a number greater than 30 are always free. This is useful directing a hotkey to output a sequence of characters and other actions:

keycode 112 = F70

Then, F70 can be bound to output a specific string:

string F70 = "Hello"

When key 112 is pressed, it will output the contents of F70. In order to execute a printed command in a terminal, a newline escape character must be appended to the end of the command string. For example, to enter a system into hibernation, the following keymap is added:

string F70 = "sudo systemctl hibernate\n"

Other examples

  • To make the Right Alt key same as Left Alt key (for Emacs), use the following line in your keymap. It will include the file /usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc, check it for details.
include "linux-with-two-alt-keys"
  • To swap CapsLock with Escape (for Vim), remap the respective keycodes:
keycode 1 = Caps_Lock
keycode 58 = Escape
  • To make CapsLock another Control key, remap the respective keycode:
keycode 58 = Control
  • To swap CapsLock with Left Control key, remap the respective keycodes:
keycode 29 = Caps_Lock
keycode 58 = Control

Saving changes

In order to make use of the personal keymap, it must be loaded with loadkeys:

# loadkeys /usr/local/share/kbd/keymaps/personal.map

However this keymap is only active for the current session. In order to load the keymap at boot, specify the full path to the file in the KEYMAP variable in /etc/vconsole.conf. The file does not have to be gzipped as the official keymaps provided by kbd.

Adjusting typematic delay and rate

The typematic delay indicates the amount of time (typically in milliseconds) a key needs to be pressed and held in order for the repeating process to begin. After the repeating process has been triggered, the character will be repeated with a certain frequency (usually given in Hz) specified by the typematic rate. These values can be changed using the kbdrate command. Note that these settings are configured separately for the console and for Xorg.

# kbdrate [-d delay] [-r rate]

For example to set a typematic delay to 200ms and a typematic rate to 30Hz, use the following command:

# kbdrate -d 200 -r 30

Issuing the command without specifying the delay and rate will reset the typematic values to their respective defaults; a delay of 250ms and a rate of 11Hz:

# kbdrate

Systemd service

A systemd service can be used to set the keyboard rate. For example:

/etc/systemd/system/kbdrate.service
[Unit]
Description=Keyboard repeat rate in tty.

[Service]
Type=oneshot
RemainAfterExit=yes
StandardInput=tty
StandardOutput=tty
ExecStart=/usr/bin/kbdrate --silent --delay 250 --rate 30

[Install]
WantedBy=multi-user.target

Then start/enable the kbdrate.service systemd service.

Layout switching

Note: General layout toggling like on X11 is not supported on the console. The following will not work with arbitrary layout combinations, especially some main layouts will not allow this at all.

Layout switching can only be simulated by establishing a different layout on one of the higher layers (typically the 3rd, AltGr).

For a list of layouts that likely support this, run

$ find /usr/share/kbd/keymaps -exec zgrep -l 'AltGr_Lock' '{}' ';'

You can test this by passing main and augmenting layout to loadkeys, e.g.

# loadkeys us mk

If it worked, the 3rd level shift (AltGr) will allow you to access the second layout, the AltGr_Lock (often Alt+Shift, you will have to inspect the keymap file with zless) will provide an effective toggle.

Note: If the second layout only prints squares, this is probably a font configuration issue.

For a permanent configuration, set the KEYMAP_TOGGLE next to the KEYMAP in /etc/vconsole.conf.