শুধুমাত্র একটি নির্দিষ্ট কীবোর্ডের জন্য কীভাবে লিনাক্সের অধীনে কীগুলি পুনরায় তৈরি করতে হয়


18

আমি সম্প্রতি একটি ইউনিকম্প কীবোর্ড কিনেছি যা অদলবদল ও উইন্ডোজ কীগুলির সাথে আসে। কীবোর্ড lsusb এ এর ​​মতো সনাক্ত করে:

Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc 

কার্নেলের কোনও উপায় রয়েছে (যেমন এক্সমোডম্যাপ ভিত্তিক নয়) ডান-ওএলটি এবং উইন্ডোজ কীগুলি অদলবদল করা যাতে প্রতিটি অ্যাপ্লিকেশন এগুলিকে অদলবদল করে এমন জায়গায় দেখতে পায় যদিও তারা কাঁচা কীবোর্ড ইনপুট পান (এক্সমোডম্যাপের সাহায্যে সোয়াপিং স্টাফগুলি তা না করে) ? কেবলমাত্র এই একটি কীবোর্ডের জন্য কী এমন উপায় আছে?


আমি সন্দেহ করি আপনি কীবোর্ডের ক্রমিক নম্বরটি মিলিয়ে এবং তারপরে রিম্যাপিংয়ের মতো স্ক্রিপ্ট কল করে উদেবের সাথে এটি করতে পারেন pping আপনার সম্ভবত ডিভাইসটিকে পিছনে ফেরাতে আলাদা করার জন্য অনুরূপ অনুরূপ স্ক্রিপ্টের প্রয়োজন হবে।
জাম

1
@ জ্যাম এই সমস্ত সংযুক্ত কীবোর্ডগুলি পুনরায় তৈরি করতে পারে? আমি কল্পনা করতে পারি না যে লিনাক্স এতটাই জটিল যে এটি সমস্ত সংযুক্ত (ইউএসবি) কীবোর্ডের জন্য কেবল একটি ম্যাপিং টেবিল পরিচালনা করতে পারে।
FUZxxl

@ জ্যাম অতিরিক্তভাবে, আপনি কীভাবে প্রকৃত অদলবদল করতে হয় তা বর্ণনা করতে পারলে আপনি আমাকে সত্যিই সহায়তা করবেন। আমি এটিতে দরকারী কিছু খুঁজে পেতে পরিচালিত করি না, কেবল এক্সমোডম্যাপ স্টাফ (যা আমি ব্যবহার করতে চাই না)।
ফুজজেক্সএল

আপনি যদি xmodmap ব্যবহার করতে না চান তবে আপনি যা জিজ্ঞাসা করছেন তা দুঃখিত বলে আপনাকে জানার জন্য আমার জ্ঞানের পক্ষে খুব সুনির্দিষ্ট বলে মনে হচ্ছে। আমি প্রস্তাবিত পদ্ধতিটি আপনার নির্দিষ্ট কীবোর্ড সংযুক্ত হওয়ার সময়কালের জন্য সমস্ত ডিভাইসের জন্য কীগুলির জন্য কীকোডগুলি অদলবদল করার জন্য xmodmap ব্যবহার করবে then আপনি কি একসাথে একাধিক কীবোর্ড ব্যবহার করবেন বলে আশা করছেন?
জাম

@ জ্যাম যদি আমি এক্সমোডম্যাপ ব্যবহার করি তবে এক্স প্রোগ্রামগুলি এখনও ভুল কীকোডগুলি দেখতে পাবে কারণ এক্স সার্ভার ক্লায়েন্টকে অপরান্তরিত কী কোডগুলি প্রেরণ করে। উদাহরণস্বরূপ ভিডিও গেমগুলির জন্য এটি গুরুত্বপূর্ণ। কার্নেলের মধ্যে এমন একটি সমাধান হওয়ার কথা রয়েছে যা স্ক্যান কোডগুলি পড়ে এমন অ্যাপ্লিকেশনগুলির সাথে আমার জীবনকে আরও জটিল করে তোলে না।
FUZxxl

উত্তর:


27

হ্যাঁ, এক্সকেবি ব্যবহার করা সম্ভব। এক্সমোডম্যাপের বিপরীতে, এক্সকেবি পৃথক ডিভাইসের জন্য আপনার কীগুলি পুনরায় তৈরি করতে পারে।

দ্রষ্টব্য: আপনার xkbcomp> 1.2.2 রয়েছে তা নিশ্চিত করুন

প্রথমে আপনার ডিভাইসগুলি এর সাথে তালিকাবদ্ধ করুন:

xinput list

আপনি এই জাতীয় কিছু পাবেন:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Pen stylus               id=11   [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Finger touch             id=12   [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=13   [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Pen eraser               id=14   [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Finger pad               id=15   [slave  pointer  (2)]
⎜   ↳ GASIA USB KB V11                          id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ G19 Gaming Keyboard                       id=8    [slave  keyboard (3)]
    ↳ G19 Gaming Keyboard                       id=9    [slave  keyboard (3)]
    ↳ Logitech G19 Gaming Keyboard              id=10   [slave  keyboard (3)]
    ↳ GASIA USB KB V11                          id=16   [slave  keyboard (3)]

আপনার ডিভাইসের স্ট্রিং সনাক্ত করুন এবং নীচের শেল স্ক্রিপ্টটি সম্পাদনা করুন, আপনার ডিভাইসের নামের সাথে মানানসই শেড লাইনটি পরিবর্তন করুন। তারপরে আপনার কীগুলি পুনর্নির্মাণের দরকার তা পরিবর্তন করুন।

উদাহরণ: xevআপনি যে কীটি পুনর্নির্মাণ করতে চান সেটি লোড করুন এবং টিপুন। ধরুন আপনি এটি কীকোড find৪ টি সন্ধান করেছেন htt https://gist.github.com/zoqaeski/3880640 এ 84 অনুসন্ধান করুন । এর মূল নাম <KP5>। তারপরে আপনি যে চাবিটি এটির পরিবর্তে চান তা সন্ধান করুন ( নীচে আরও একই লিঙ্কে ) এবং বন্ধনীগুলির ভিতরে কী আছে তা অনুলিপি করুন। আপনার চাইলে সমস্ত কীগুলির জন্য প্রক্রিয়াটি পুনরাবৃত্তি করুন।

remote_id=$(
    xinput list |
    sed -n 's/.*GASIA.*id=\([0-9]*\).*keyboard.*/\1/p'
)
[ "$remote_id" ] || exit

# remap the following keys, only for my custom vintage atari joystick connected
# through an old USB keyboard:
#
# keypad 5 -> keypad 6
# . -> keypad 2
# [ -> keypad 8
# left shift -> left control

mkdir -p /tmp/xkb/symbols
# This is a name for the file, it could be anything you
# want. For us, we'll name it "custom". This is important
# later.
#
# The KP_* come from /usr/include/X11/keysymdef.h
# Also note the name, "remote" is there in the stanza
# definition.
cat >/tmp/xkb/symbols/custom <<\EOF

xkb_symbols "remote" {
    key <KP5>  { [ KP_Right, KP_6, U2192, U21D2 ]       };
    key <I129> { [ KP_Down, KP_2, U2193, U21D3 ]       };
    key <AD12> { [ KP_Up, KP_8, U2191, U21D1 ]  };
    key <LFSH> { [ Control_L ]        };
};
EOF

# (1) We list our current definition
# (2) Modify it to have a keyboard mapping using the name
#     we used above, in this case it's the "remote" definition
#     described in the file named "custom" which we specify in
#     this world as "custom(remote)".
# (3) Now we take that as input back into our definition of the
#     keyboard. This includes the file we just made, read in last,
#     so as to override any prior definitions.  Importantly we 
#     need to include the directory of the place we placed the file
#     to be considered when reading things in.
#
# Also notice that we aren't including exactly the 
# directory we specified above. In this case, it will be looking
# for a directory structure similar to /usr/share/X11/xkb
# 
# What we provided was a "symbols" file. That's why above we put
# the file into a "symbols" directory, which is not being included
# below.
setxkbmap -device $remote_id -print \
 | sed 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' \
 | xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null

তারপরে এটি উত্স করুন (আপনি এটি আপনার .xinitrc এ যুক্ত করতে পারেন)। সব শেষ! এখন কীগুলি টিপলে কাঙ্ক্ষিত আউটপুট উত্পন্ন করা উচিত, কেবলমাত্র আপনার নির্দিষ্ট ডিভাইসের জন্য for

সম্পাদনা : সম্প্রতি, আমি লক্ষ্য করেছি যে, কোনও কারণে, নতুন কনফিগারেশন অবিলম্বে প্রয়োগ করা হয়নি। আপনাকে প্রথমে আপনার অন্যান্য কীবোর্ডের একটি কী টিপতে হবে , তারপরে আপনার পরিবর্তিত কীবোর্ডে কনফিগার করা কীগুলি পরীক্ষা করতে হবে। আমি জানি না কেন এমন হয়, কিছুটা ক্যাশে হতে পারে।


আমি সোমবারে এটি চেষ্টা করি যখন আমি এই কীবোর্ডটি যেখানে কম্পিউটার ব্যবহার করি সেখানে ফিরে আসি।
FUZxxl

1
a) sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p' গ) হ্যাঁ, আপনার অবশ্যই প্রথমে $remote_idআইডি নম্বরটি প্রতিস্থাপন করে পরীক্ষা করা উচিত । দ্রষ্টব্য সেখানে দুটি উল্লেখ $remote_idআছে, আপনি দুটি পরিবর্তন করেছেন?
ওয়াটকম

1
ওহ, এবং হার্ড-কোডেড পরীক্ষা করার সময় $remote_id, নিশ্চিত হয়ে নিন যে আপনি ইতিমধ্যে মন্তব্য না করে লাইনটি মন্তব্য করেছেন - [ "$remote_id" ] || exitযদি না অন্যথায় এটি কেবল জামিন হয়ে যায়।
ওয়াটকম

1
@ পরিসংখ্যান-এইচবি $9কাজ করবে না, আপনি বোঝাতে চাইছেন 9?
ওয়াটকম

1
এটি আমার জন্য কাজ করে lampjs.wordpress.com/2015/06/26/…
usil

6

যে কেউ গুগল থেকে এখানে এসেছেন এবং প্রশ্নকর্তা মূলত যা আশা করেছিলেন তার সাথে সামঞ্জস্য রেখে আরও উত্তর চান, আমি evdevস্তরে ইভেন্টগুলি পুনর্নির্মাণের দুটি উপায় সম্পর্কে অবগত আছি যাতে পরিবর্তনটি সমস্ত অ্যাপ্লিকেশনগুলিতে প্রয়োগ হয়:

  1. udev হার্ডওয়্যার ডাটাবেস এন্ট্রিগুলি সংশোধন করার জন্য একটি এপিআই সরবরাহ করে যা স্ক্যানকোড এবং কীকোডগুলির মধ্যে ম্যাপিংগুলি নিয়ন্ত্রণ করে। এই আরচিউইকি পৃষ্ঠাতে , নির্দেশাবলী রয়েছে, স্পষ্টভাবে বলেছে যে এটি এক্স 11 এবং কনসোল ইনপুট উভয়ের জন্যই কাজ করবে।

    সংক্ষিপ্তসারটি হ'ল আপনি একটি কাস্টম এন্ট্রি তৈরি করেছেন /etc/udev/hwdb.d/যাতে কোনও ডিভাইস ম্যাচ প্যাটার্ন এবং কিছু স্ক্যানকোড থেকে কী-কোড রিম্যাপিং সংজ্ঞা রয়েছে, তারপরে systemd-hwdb updateডাটাবেসটি পুনর্নির্মাণের জন্য চালনা করুন এবং udevadm triggerরিবুট ছাড়াই এটি প্রয়োগ করুন।

  2. দেওয়া হয়েছে যে ওয়েল্যান্ড X11 এর কীবোর্ড সাবসিস্টেম ব্যবহার করে না এবং জিনোম শেল এবং ওয়েস্টনের মতো বড় ওয়াইল্যান্ড কম্পোজিটারগুলি লাইবিনপটের প্রাসঙ্গিক দিকগুলি কনফিগার করতে ইউআই প্রয়োগ করে না, কেউ ল্যাভিটেকের জন্য জি 15 ডেমন ব্যবহারকারী স্পেস ড্রাইভারের অনুরূপ সমস্যার সমাধান করে এমন এক ডেডমন লিখেছিলেন ইভাড্রেমাপ্কি নামে একটি ডিমন। জি 15 গেমিং কীবোর্ড।

    (এটি পুনর্নির্মাণের ইচ্ছাকৃত ইভেন্টগুলি গ্রাস করে, তাই ডিভাইসে আর কিছু শুনছে না সেগুলি দেখতে পাবে না, তারপরে uinputইউজারস্পেস থেকে কার্নেল-স্তরের ইনপুট ডিভাইস তৈরির জন্য API এর মাধ্যমে সংশোধিত ইভেন্টগুলি নির্গত করে ))


আমি এখানে
ডকডাকগো থেকে

0

যারা @ ওয়াটকম অপশনে সফল হন নি তাদের জন্য কেবল আপনার নতুন ম্যাপিং ফাইলটি রেখে দিন:

xkb_symbols "remote" {
    key <KP5>  { [ KP_Right, KP_6, U2192, U21D2 ]       };
    key <I129> { [ KP_Down, KP_2, U2193, U21D3 ]       };
    key <AD12> { [ KP_Up, KP_8, U2191, U21D1 ]  };
    key <LFSH> { [ Control_L ]        };
};

/ usr / শেয়ার / X11 / xkb / চিহ্ন / হিসাবে সম্ভবত রুট (উবুন্টু, আপনার বিতরণের জন্য পৃথক হতে পারে), ফাইলটিকে 'কাস্টম' বলুন call আপনার বর্তমান লেআউট স্ট্রিংটি জিজ্ঞাসা setxkbmap -device <device id> -print | grep xkb_symbolsকরুন +customএবং এতে যুক্ত করুন। রিম্যাপড কীগুলি এবং সংশোধিত বিন্যাসের স্ট্রিং সহ নতুন লেআউট সেট করুন:

setxkbmap -device <device id> -layout "us+ru:2+us:3+inet(evdev)+capslock(grouplock)+custom"

প্রভাব স্থায়ী হয় না এবং দুর্ভাগ্যক্রমে পুনরায় সেট করা হয় যখন অন্যান্য কীবোর্ড সংযুক্ত থাকে, কীভাবে এটি ঠিক করা যায় তা ভেবে দেখেনি। আপনি .bashrcযদিও আপনার উপরের কমান্ডটি যুক্ত করতে পারেন , সুতরাং কীগুলি পুনরায় আরম্ভ করার প্রয়োজন হলে পুনরায় চালু হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.