تنظیمات صفحه کلید در گنو/لینوکس
- تفاوت صفحه کلیدها و layoutهای مختلف
- تنظیمات صفحه کلید در tty
- تنظیمات صفحه کلید در X11
- Swaywm روی Wayland
- ساخت keymap شخصی
استفاده از دو زبان فارسی و انگلیسی برای کاربران فارسی رایانه ضروری است. پشتیبانی از زبان فارسی در گنو/لینوکس مدتهاست که افزوده شده و همواره استانداردهای بهتری به نسبت ویندوز داشته است. با این حال شخصی سازی بیشتر، همواره تجربه خوشایندتری در کار با رایانه برای ما خواهد داشت. استفاده از دو زبان همزمان و نبود استاندارد یکسان برای فارسی نویسی، موجب میشود کاربران فارسی زبان گاه با مشکلاتی مواجه شوند، که هرگز برای کاربران انگلیسی زبان پیش نمیآید. چندی پیش یکی از دوستان دنبال راهی برای افزودن یک نویسه خاص به صفحه کلید بود. اینکه نتوانسته بود راهنمای مناسبی برای این کار پیدا کند، موجب شد به فکر نوشتن یک مطلب در این زمینه بیفتم.
اینجا تلاش میکنم درباره تنظیمات صفحه کلید در محیط کنسول tty
و محیطهای گرافیکی X11
و مدیر پنجره Sway
روی ویلند بنویسم. تنظیمات صفحه کلید روی ویلند وابسته به کامپوزیتوری است که از آن استفاده میکنید. اما عمده آنچه اینجا به آن اشاره میشود، بر روی محیطهای کاربری دیگر ویلند، به ویژه آنها که بر اساس wlroots
هستند نیز فابل انجام است.
تفاوت صفحه کلیدها و layout
های مختلف
بیشتر ما از layout
انگلیسی و فارسی QWERTY
روی صفحه کلید استفاده میکنیم. که نمونه آن را در عکس زیر میتوانید ببینید.
اما چیدمانهای دیگری نیز برای صفحه کلیدهای QWERTY
بسته به زبان صفحه کلید وجود دارد. به عنوان نمونه صفحه کلید فرانسوی AZERTY
که تغییراتی را در صفحه کلید انگلیسی QWERTY
برای سازگاری بیشتر با زبان فرانسوی داده است:
برای اطلاعات بیشتر در این زمینه میتوانید صفحه مربوط به آن را در ویکیپدیا بخوانید.
همچنین چیدمانهای دیگری نیز از صفحه کلید انگلیسی وجود دارد که DVORAK
و COLEMAK
شناخته شدهتر هستند.
نمونه صفحه کلید DVORAK
:
نمونه صفحه کلید COLEMAK
:
صفحه کلید فارسی استاندارد نیز نمونهای از صفحه کلیدهای QWERTY
دستهبندی میشود. که چیدمان کلیدها در آن به این صورت است:
تنظیمات صفحه کلید در tty
شاید کمتر برای شما پیش آمده باشد که بخواهید تنظیمات صفحه کلید را در کنسول یا همان محیط tty
تغییر دهید بیشتر ما از صفحه کلید انگلیسی QWERTY
که بیشتر جاها پیش گزیده است، استفاده میکنیم. اما همانطور که اشاره شد، چیدمانهای دیگری هم از حروف انگلیسی وجود دارد. این یکی از دلایلی است که ممکن است بخواهیم در محیط کنسول از یک layout
متفاوت استفاده کنیم.
چنانچه از Systemd
به عنوان راهانداز استفاده میکنید میتوانید با فرمان localectl list-keymaps
لیستی از چیدمانهای موجود را ببینید. برای من خروجی این دستور ۲۳۲ صفحه کلید متفاوت را نمایش میدهد.
همچنین میتوانید با استفاده از grep
صفحه کلید مورد نظرتان را بیابید:
در صورتی که از Systemd
استفاده نمیکنید، دستور find
میتواند لیستی از صفحه کلیدهای موجود را به شما بدهد. خروجی آن برای من به این صورت است:
و برای یافتن صفحه کلید مورد نظرتان به جای *
عبارتی که میخواهید پیدا کنید را بین دو علامت *
قرار دهید:
برای تنظیم کردن صفحه کلید مورد نظرتان باید از فرمان loadkeys
استفاده کنید. توجه کنید که اجرای این فرمان نیاز به دسترسی روت دارد:
برای این کار هم از نام صفحه کلید و هم از مسیر فایل keymap
میتوانید استفاده کنید. صفحه کلیدی را که انتخاب میکنید باید مناست کنسول بوده و کاراکترهای آن پشتیبانی شوند. چنانچه صفحه کلید فارسی را بخواهید برای کنسول تنظیم کنید با خطا مواجه خواهید شد:
برای اینکه این تنظیمات به صورت همیشگی انجام شود میتوانید با کلید واژه KEYMAP
و در فایل /etc/vconsole.conf
این کار را انجام دهید.
تنظیمات صفحه کلید در X11
setxkbmap
برای تنظیم صفحه کلید در محیطهای کاربری که از X11
سرور استفاده میکنند، هر یک از آنها مانند گنوم یا کیدیای برنامه خاص خودشان را دارند. یک راه عمومیتر و سادهتر استفاده از فرمان setxkbmap
است.
من این فرمان را به این صورت استفاده میکنم:
تنظیمات صفحه کلید با فرمان setxkbmap
سه بخش دارد:
- مدل صفحه کلید: میتوانید مدل صفحه کلیدتان را با
-model <YOUR-KEYBOARD-MODEL>
مشخص کنید. - layout[s]: هر تعداد از
layout
های موجود را میتوانید برای استفاده با صفحه کلید تنظیم کنید. دقت کنید که باید از,
برای جدا کردن اسم آنها استفاده کنید. - تنظیمات ویژه: میتوانید تنظیمات ویژه صفحه کلیدتان را با
-options <YOUR-KEYBOARD-OPTIONS>
مشخص کنید.
در فرمانی که من استفاده میکنم، مدل صفحه کلید را thinkpad
و دو زبان انگلیسی و فارسی را برای آن تنظیم کردهام.
در بخش تنظیمات ویژه با استفاده از grp:shifts_toggle
مشخص کردهام که جابجایی بین زبان های صفحه کلید با فشار دادن همزمان دو کلید Shift
انجام شود.
شاید برای شما عجیب باشد اما برای من که تقریبا همیشه دستم روی صفحه کلید است، کار راحتتری است به نسبت استفاده از Alt+Shift
. البته من کلیدهای دیگری نیز برای تغییر زبان صفحه کلید دارم که چنانچه نیاز باشد با یک دست زبان صفحه کلید را بتوانم عوض کنم.
سپس با caps:escape_shifted_capslock
مشخص کردهام که کلید CapsLock
به عنوان کلید Escape
عمل کند.
من از ادیتور ویم (Vim
) برای ویرایش فایلهای متنی استفاده میکنم و برای خارج شدن از مودهای مختلف این ادیتور از کلید Escape
زیاد استفاده میکنم. محل استاندارد این کلید روی صفحه کلید گوشه بالا و سمت چپ است، که دور از دسترس است. تنظیم کلید CapsLock
به عنوان Escape
استفاده از آن را برای من راحتتر میکند.
گزینه بعدی در تنظیمات ویژه altwin:prtsc_rwin
است که مشخص میکند کلید PrinttScreen (PrtSc)
که روی صفحه کلید لپتاپ من کنار Alt
سمت راست قرار دارد به عنوان یک کلید Meta
یا Mod
(همان کلید لوگو Win
) دوم عمل کند.
سالهاست که من از محیطهای دسکتاپ روی لرایانه خودم استفاده نکردهام و به جای آنها از مدیر پنجرهها استفاده میکنم، که سبکتر هستند و قابلیت شخصی سازی بیشتری دارند. بیشتر کلیدهای میانبر من به صورت Mod+<SOME-KEY>
هستند،که تعدادشان هم زیاد است. داشتن کلید Mod
در دو سمت صفحه کلید استفاده از این میانبرها را برای من راحتتر میکند.
در نهایت هم lv3:ralt_switch
مشخص میکند که بتوان به لایه سوم صفحه کلید با استفاده از کلید Alt
سمت راست، دسترسی داشت. همانطور که میدانید هر زبان روی صفحه کلید بیش از یک لایه از کاراکترها را دارد. تقریبا همه جا میتوان با استفاده از کلید Shift
کاراکترهای لایه دوم صفحه کلید را تایپ کرد. این کاراکترها برای زبان انگلیسی حروف بزرگ و برخی کاراکترهای پر کاربرد دیگر هستند. برای فارسی هم در صفحه کلید استاندارد نویسه ژ
روی لایه دوم نویسه ز
قرار دارد. برخی کاراکترهای پر کاربرد دیگر هم در این لایه قرار گرفتهاند. ZWNJ
یا نیمفاصله یکی از آنهاست. جالب است بدانید که تعدادی از کاراکترهای کم کاربردتر هم روی لایههای سوم و پایینتر صفحه کلید قرار دارند. NBSP
یا فاصله نشکن یکی از آنهاست که روی لایه سوم کلید اسپیس قرار دارد. برای دسترسی به این لایه من از کلید ALt
سمت راست استفاده میکنم.
سوال مهمی که پیش میآید این است که کجا میتوان لیستی از مدلها، layout
ها و تنظیمات ویژه را یافت. کافیست در ترمینال با استفاده از man xkeyboard-config
داکیومنت مربوط به آن را باز کنید و بخوانید. لیست مفصلی از تمامی گزینهها به همراه توضیحی گویا برای هر یک را خواهید یافت. در مرورگرتان هم چنانچه عبارت man xkeyboard-config <YOUR-DESTRIBUTION>
را جستوجو کنید، داکیومنت مربوط به توزیعتان را خواهید یافت. برای نمونه توزیع Arch Linux
البته برای یافتن layout
ها میتوانید مسیر /usr/share/X11/xkb/symbols
را ببینید.
نکته بعدی این است که چطور این تنظیمات را همیشگی کنیم. من برای راهاندازی محیط گرافیکی X11
از بسته xorg-xinit
استفاده میکنم و فرمان startx
را مستقیم از کنسول اجرا میکنم و از Display Manager
استفاده نمیکنم. وقتی این فرمان را اجرا میکنم تنظیمات مربوط به محیط گرافیکی را از فایلهای متنی میخواند. یکی از این فایلها .xinitrc
است که در دایرکتوری $HOME
قرار دارد. کافیست من هر فرمانی که برای تنظیم محیط گرافیکی خودم نیاز دارم را در یک فایل قرار دهم و آن را از داخل .xinitrc
فراخوانی کنم. من این فرمانها را در فایل .xprofile
در دایرکتوری $HOME
قرار دادهام.
همانطور که میبینید تنظیمات صفحه کلید در خط آخر فایل مشخص شده است. هر Display Manager
فایلهای تنظیماتی دارد که پیش از بالا آمدن محیط گرافیکی آنها را فراخوانی میکند. میتوانید مسیر این فایلها را با جستوجو در اینترنت بیابید و تنظیمات مربوط به صفحه کلید را در آنها قرار دهید تا به صورت خودکار انجام شوند.
xmodmap
xmodmap
ابزاری برای ویرایش چیدمان کلیدها روی صفحه کلید در X11
است. ممکن است شما نیاز داشته باشید جای دو تا از کلیدها را روی صفحه عوض کنید و این گزینه در بین انتخابهای setxkbmap
وجود نداشته باشد، برای اینکار میتوانید از xmodmap
استفاده کنید:
فرمان بالا کلید Menu
را به کلید Super
تبدیل میکند. با مشابه آنچه setxkbmap -option altwin:menu_win
انجام میدهد. برای یافتن کد مربوط به هر کلید فیزیکی روی صفحه کلید میتوانید لیست چیدمان فعلی صفحه کلید را با استفاده از xmodmap -pk
ببینید.
فرمان xmodmap -pke
این لیست را به صورتی که برای xmodmap
قابل استفاده باشد در اختیار شما قرار میدهد.
لیستی از نام کلیدها که برای xmodmap
قابل استفاده است را میتوانید در این صفحه ببینید.
برای یافتن کد یک کلید خاص میتوانید از xev
استفاده کنید. کافیست xev
را در ترمینال اجرا کنید و کلید مورد نظر را فشار دهید و دادههای مربوط به آن را ببینید.
این دادهها برای کلیدهای j
، k
و کلید لوگوی روی صفحه کلید من به این صورت هستند:
همانطور که مشاهده میکنید حجم دادههای خروجی xev
زیاد است. این برنامه تمام event
های مربوط به ماوس را هم نمایش میدهد که ممکن است کار یافتن کد را دشوار کند. چنانچه فقط کد عددی کلید را میخواهید، میتوانید آن را به این صورت استفاده کنید:
همانطور که میبینید خروجی را فیلتر کردهایم که تنها دادههای مورد نیاز ما را نمایش دهد.
ابزارهای زیادی برای کار با صفحه کلید در X11
سرور وجود دارد به عنوان نمونه xset -q
اطلاعاتی از وضعیت موجود تنطیمات به شما میدهد:
و بعد از فعال کردن CapsLock
:
میتوان از آن برای بررسی کردن وضعیت کلیدها در اسکریپتها و تنظیمات استفاده کرد. همچنین میتوان با استفاده از xdotool
وضعیت کلیدهای صفحه کلید و ماوس و محل نشانگر ماوس را تنظیم کرد. xdotool
ابزاری برای شبیهسازی event
های ورودیها در محیط X11
سرور است.
فرمان بالا وضعیت کلید CapsLock
را بررسی کرده و در صورت فعال بودن آن را غیرفعال میکند.
Swaywm
روی Wayland
تنظیمات صفحه کلید در محیط ویلند بر عهده کامپوزیتور است و ابزار یکتایی و روش یکسانی برای انجام ان وجود ندارد. کامپوزیتوزها روی ویلند برای دریافت ورودیها بدون واسط و از واسطی استفاده نمیکنند و دادهها را در لایه پایینتری از API
های کرنل دریافت میکنند.
تنظیمات صفحه کلید در Swaywm
در فایل تنظیمات این مدیر پنجره انجام میشود. این فایل در حالت پیش گزیده در مسیر /etc/sway/config
قرار دارد. چنانچه فایل تنظیمات در مسیر ~/.config/sway/config
وجود داشته باشد این فایل اولویت بالاتری خواهد داشت.
تنظیمات صفحه کلید من برای Swaywm
در این فایل و به این صورت است:
که همان تنظیماتی است که برای X11
سرور داشتم.
ابزارهایی مثل xmodmap
، setxkbmap
، xset
، xev
و xdotool
روی ویلند قابل استفاده نیستند. در ویکی Swaywm
صفحهای مربوط به معرفی جایگزین برای ابزارهای معمول مورد استفاده و در X11
وجود دارد که راهنمای مناسبی است. همچنین میتوانید به این صفحه در گیتهاب برای یافتن ابزارهای بیشتر روی ویلند سر بزنید.
به جای xev
میتوانید از wev
و به جای xdotool
از wtype
، wlrctl
، swaymsg seat <seat> cursor …
یا ydotool
استفاده کنید. اما ابزاری برای جایگزینی xmodmap
معرفی نشده است که به جای آن یک layout
شخصی سازی شده را میشود استفاده کرد.
ساخت keymap
شخصی
اعمال تنظیمات صفحه کلید حتی در محیط x11
به صورت دایمی با استفاده از ابزارهایی که معرفی کردیم هم ممکن است تمامی نیازهای شما را برآورده نکند. ساختن یک keymap
با توجه به نیاز شخصی شما امکان هر گونه تغییری در چیدمان حروف را برای شما فراهم میکند.
پیش از توضیح بیشتر بگذارید مسالهای که شروع شکل گرفتن این نوشته شد را شرح دهم. یکی از دوستان در ماستودون دنبال راهی برای جایگزینی /
با نویسه ۀ
روی layout
فارسی بود. این نویسه روی صفحه کلید فارسی استاندارد وجود ندارد و یک نویسه عربی است. شکل درست آن در فارسی با ترکیب دو نویسهٔ ه
و نویسهٔ _ٔ
نوشته میشود. اما با توجه به محدودیتهایی که برای چاپ وجود داشت، مجبور بودند از این نویسه استفاده کنند.
بهترین راه برای ساخت keymap
شخصی استفاده از یکی از فایلهای موجود در مسیر /usr/share/X11/xkb/symbols
و ویرایش آن است.
به عنوان نمونه فایل مربوط به keymap
فارسی چنین الگویی دارد:
در این فایل کاراکترهای مربوط به هر کلید در یک آرایه مشخص شدهاند که مربوط به لایههای مختلف آن کلید هستند. ردیف مورد نظر ما ` key
برای اعمال تغییر و ساخت keymap
شخصی خودمان یک کپی از این فایل تهیه میکنیم و تغییرات را روی آن اعمال میکنیم. پس از آن میتوانیم از این layout
استفاده کنیم.
کد یونیکد مربوط به نویسه ۀ
برابر با U+06C0
است، که در این فایل باید مشابه سایر کاراکترهای یونیکد به صورت 0x10006c0
نوشته شود:
برای یافتن نام یا کد کاراکترهای یونیکد میتوانید به این وبسایت مراجعه کنید.
گر چه ویرایش فایلها در مسیر /usr/share/X11/xkb/symbols
امکان شخصی سازی keymap
را به شما میدهد اما از نسخه libxkbcommon 0.10.0
امکان ایجاد فایلهای تنظیمات شخصی در $XDG_CONFIG_HOME/xkb
و در پوشههای $XDG_CONFIG_HOME/xkb/rules/
و $XDG_CONFIG_HOME/xkb/symbols
فراهم شده است و فایلهای موجود در این مسیر پیش از فایلهای پیشگزیدهاش فراخوانی میشوند.
به عنوان نمونه برای افزودن یک آپشن برای جایگزینی کلید PtrSc
با کلید Menu
فایلهای $XDG_CONFIG_HOME/xkb/rules/envdev
و $XDG_CONFIG_HOME/xkb/symbols/custom
را به صورت زیر ایجاد و تنظیم میکنیم:
و بعد باید این گزینه را فعال/غیرفعال کنیم. برای محیط گنوم:
یا برای ایجاد layout
شخصی که پیش از این ایجاد کردیم:
من از فایل زیر برای جابجایی حرف چ
در کیبورد استاندارد فارسی با /
که کاربرد کمتری دارد استفاده میکنم:
برای استفاده از این layout
در محیط Swaywm
در فایل تنظیمات مربوط به آن input type:keyboard xkb_layout ir-mz
را میافزاییم یا از این دستور استفاده میکنیم:
همانطور که گفتم این تنظیمات پیش از مسیرهای پیشگزیده فراخوانی و اعمال میشوند. برای اطلاعات بیشتر میتوانید این صفحه را بخوانید.
دیدگاهها
میتوانید دیدگاههای این پست را در ماستودون و اینجا ببینید. برای نوشتن دیدگاه خود روی لینک زیر کلیک کنید.