איך להפוך את Caps Lock ל Escape ב Linux

פוסט זה כולל טיפ קצר על כלי עבודה בסביבת Linux. בשביל ללמוד יותר על עבודה בסביבת Linux ו Unix אני ממליץ לכם לבדוק את קורס Linux שיש לנו כאן באתר. הקורס כולל מעל 50 שיעורי וידאו והמון תרגול מעשי ומתאים גם למתחילים.
 

מסיבות היסטוריות מוזרות כל יצרני המקלדות מתעקשים לשים כפתור חסר ערך לחלוטין במקום טוב בשורה האמצעית ולזרוק את הכפתור הכי חשוב במקלדת לפינה השמאלית עליונה. לשמחתנו זו טעות שמאוד קל לתקן בתוכנה וב Linux אפשר למצוא שלוש גישות מרכזיות לתיקון:

1. החלפה ב Gnome Shell

משתמשי gnome יכולים להתקין כלי בשם gnome-tweaks (כך נקראת גם החבילה) ובתוכו למצוא המון התאמות מועילות למערכת. בנושא ה Caps Lock אנחנו נכנסים לתפריט Keyboard and Mouse, בוחרים Additional Layout Options ובתוכו Caps Lock Behaviour ויכולים לבחור את האפשרות הקסומה Make Caps Lock an additionsl Esc.

זאת השיטה הכי קלה להגיע לתוצאה החיסרון היחיד הוא שברגע שאתם עוזבים את gnome לטובת מנהל חלונות אחר ה Caps Lock שלכם חוזר להרגלים הישנים והפרועים שלו.

2. החלפה באמצעות xmodmap

שיטה שניה עוברת דרך פקודה בשם xmodmap. זו תוכנית עזר קטנה שמטרתה לשנות מיפויי מקשים בזמן ריצה. היא די פשוטה לשימוש, עובדת בכל מנהל חלונות והאפקט מורגש מיידית. בשביל להחליף עם xmodmap צרו קובץ באיזה שם שתחברו (אני קראתי לו disable_capslock) עם התוכן הבא:

remove lock = Caps_Lock
keycode 0x42 = Escape

ואז הפעילו xmodmap והעבירו את שם הקובץ כפרמטר:

$ xmodmap disable_capslock

זאת שיטה פשוטה שתמיד עובדת אבל יש לה חיסרון אחד מרכזי: אצלי על הלפטופ כל כניסה ל Sleep והתעוררות מחדש של המחשב כאילו ניתקה את המקלדת וחיברה אותה מחדש מה שגרם למחיקת השינויים בכל יציאה מ Sleep.

3. החלפה ב xorg.conf

שיטה שלישית שהיתה המורכבת ביותר ליישום אך עבדה לי הכי טוב היא שינוי בהגדרות X. ברוב ההפצות הגדרות אלה יושבות בתיקיית /etc/X11 אבל ב Ubuntu העדיפו לשים אותן ב /usr/share/X11/xorg.conf.d. הקובץ 40-libinput.conf מתיקיית ההגדרות הוא המפתח והוא שאחראי על הגדרת התקני הקלט. החלק הרלוונטי בקובץ נראה כך:

Section "InputClass"
        Identifier "libinput keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
EndSection

תוספת שורה אחת לקובץ זה עושה את כל ההבדל ואחרי השינוי הוא יראה כך:

Section "InputClass"
        Identifier "libinput keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Option "XkbOptions" "caps:escape,terminate:ctrl_alt_bksp"
        Driver "libinput"
EndSection

שינוי זה משפיע על כל מנהלי החלונות במכה אחת ונשאר פעיל גם אחרי כניסה למצב שינה. על הדרך אפשר לראות את ההגדרה terminate:ctrl_alt_bksp שגורמת לזה שלחיצה על Ctrl+Alt+Backspace יוציאו אתכם מ X גם אם משהו במנהל החלונות תקוע.