कैसे एक यूएसबी कीबोर्ड के लिए एक अलग कीबोर्ड लेआउट को स्थायी रूप से असाइन करें?


16

मैं अक्सर अपने लैपटॉप (बाहरी मॉनिटर और माउस के अलावा, जो सभी वस्तुतः मेरे लैपटॉप को डेस्कटॉप कंप्यूटर में परिवर्तित करता है) के लिए एक यूएसबी कीबोर्ड को प्लगइन करता हूं और तब मैं एक अलग कीबोर्ड लेआउट का उपयोग करना पसंद करता हूं।

मुझे हर बार जब मैं इस USB कीबोर्ड को प्लग इन करता हूं, तो मुझे वर्तमान कीबोर्ड लेआउट को मैन्युअल रूप से बदलना होगा।

और मैं इसके लिए एक स्वचालित तरीके का उपयोग करना चाहूंगा, यदि संभव हो तो।

यहाँ प्रश्न का उत्तर राडू को कुछ सुराग देता है, लेकिन ऐसा लगता है कि मुझे इस कार्य के लिए एक स्टार्टअप स्क्रिप्ट की आवश्यकता होगी क्योंकि कंप्यूटर शुरू होने पर हर बार मेरे यूएसबी कीबोर्ड के लिए डिवाइस आईडी बदल जाती है।

इस स्टार्टअप स्क्रिप्ट में संभवत: पहले कमांड शामिल होगी xinput -list | grep "USB Keyboard", और पहले USB कीबोर्ड आईडी नंबर को प्रदर्शित करने के लिए एक और कमांड शामिल होगी और फिर अंतिम कमांड में इसका उपयोग करके उस यूएसबी कीबोर्ड के लिए मेरे चुने हुए लेआउट को नीचे सेट करें:

setxkbmap -device <NUMBER> -layout <LAYOUT>



1
@ सादी क्या आप डॉ। मार्टिन लूथर किंग की हत्या के बाद रटगर्स और अमेरिका के झंडे को उलटने की बात कर रहे हैं? पॉल रोबसन: महान अग्रदूत Freedomways द्वारा पर पेज 182
guest271314

@ guest271314 बहुत बहुत धन्यवाद! लेकिन मुझे आश्चर्य है कि आप इस सवाल पर टिप्पणी करने के लिए यहां कैसे आ गए: history.stackexchange.com/questions/48est4/… ;-) यह भी विरोध का एक और स्मार्ट रूप है, लेकिन मुझे नहीं लगता कि यह अंततः विकसित हो सकता है। सुने कहानी मुझे याद है।
सादी

@ सादी आपका प्रश्न राजनीति में हटा दिया गया था।
.१३१४

जवाबों:


15

थोड़ा शोध करने के बाद, मैंने एक समाधान ढूंढ लिया है, हालांकि मैं अभी भी अन्य (शायद बेहतर) उत्तर के लिए खुला हूं।

यहां एक स्टार्टअप स्क्रिप्ट है (जिसे स्टार्टअप एप्लिकेशन में जोड़ा जा सकता है ) जो कर देगा maually में प्रवेश किया usbkbd_layout चर usbkbd डिवाइस आईडी में मिली xinput -List :

#!/bin/bash
usbkbd=`xinput -list | grep -c "USB Keyboard"`
if [[ "$usbkbd" -gt 0 ]]
then
    usbkbd_ids=`xinput -list | grep "USB Keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    usbkbd_layout="tr(f)"
    for ID in $usbkbd_ids
    do
      setxkbmap -device "${ID}" -layout "${usbkbd_layout}"
    done
fi
exit 0

यह स्क्रिप्ट उन परिदृश्यों के लिए काफी उपयोगी (और अधिक स्थिर) है जहां उपयोगकर्ता डेस्कटॉप सेटअप (बाहरी कीबोर्ड, माउस और मॉनिटर, आदि) के साथ लैपटॉप का उपयोग करना शुरू करता है, और जब भी बाहरी यूएसबी कीबोर्ड प्लग इन किया जाता है, तो इसे मैन्युअल रूप से भी चलाया जा सकता है। ...

================================================== ========================

बेहतर (लगभग पूर्ण) समाधान - मिनिमस हेक्सिमस के लिए धन्यवाद और धागे के संबंधित योगदानकर्ताओं का उल्लेख उन्होंने अपनी टिप्पणी में किया है:

मैं अब सिर्फ अपने USB कीबोर्ड को प्लग इन कर सकता हूं और अपने लैपटॉप पर डिफ़ॉल्ट कीबोर्ड लेआउट (TR-Q) को रखते हुए स्वचालित रूप से इसका अलग (TR-F) कीबोर्ड लेआउट लागू कर सकता हूं!

यहाँ फाइलें और उनकी सामग्री है जो इसे संभव बनाती है:

/etc/udev/rules.d/00-usb-keyboard.rules

ATTRS{idVendor}=="09da", ATTRS{idProduct}=="0260", OWNER="sadi"
ACTION=="add", RUN+="/home/sadi/.bin/usb-keyboard-in_udev"
ACTION=="remove", RUN+="/home/sadi/.bin/usb-keyboard-out_udev"

/home/sadi/.bin/usb-keyboard-in_udev

#!/bin/bash
/home/sadi/.bin/usb-keyboard-in &

/home/sadi/.bin/usb-keyboard-in

#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/sadi/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
usbkbd_id=`xinput -list | grep "USB Keyboard" | awk -F'=' '{print $2}' | cut -c 1-2 | head -1`
usbkbd_layout="tr(f)"
if [ "${usbkbd_id}" ]; then
    gsettings set org.gnome.settings-daemon.plugins.keyboard active false
    sleep 2
    setxkbmap -device "${usbkbd_id}" -layout "${usbkbd_layout}"
fi

/home/sadi/.bin/usb-keyboard-out_udev

#!/bin/bash
/home/sadi/.bin/usb-keyboard-out &

/home/sadi/.bin/usb-keyboard-out

#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/sadi/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
gsettings set org.gnome.settings-daemon.plugins.keyboard active true

टिप्पणियाँ:

  1. बेशक आपके सभी चार फाइलों में "बिन" फ़ोल्डर में आवश्यक अनुमतियाँ (पठनीय और निष्पादन योग्य) होनी चाहिए, जो शायद टर्मिनल कमांड के साथ उदाहरण के लिए लागू की गई हों। chmod - 755 /home/sadi/.bin/usb-keyboard-*
  2. कभी-कभी USB कीबोर्ड प्लग-इन करने के बाद भी उसी (डिफ़ॉल्ट) कीबोर्ड लेआउट का उपयोग करता है, और दूसरी कोशिश में निर्दिष्ट लेआउट पर स्विच करता है (शायद कहीं और थोड़ा और सोने का समय चाहिए?)
  3. USB कीबोर्ड विशिष्ट लेआउट लॉगिन स्क्रीन (जब आप लॉग आउट करते हैं) में प्रभावी नहीं है।
  4. यदि आप / घर के लिए एक अलग विभाजन का उपयोग करते हैं , तो रूट विभाजन, जैसे / usr / लोकल / बिन में कहीं भी चार लिपियों को रखना एक बेहतर विचार हो सकता है और तदनुसार सभी संबंधित फ़ाइलों की सामग्री को संशोधित करें, क्योंकि कभी-कभी udv की तलाश हो सकती है आपके / घर विभाजन से पहले उन फ़ाइलों को माउंट किया गया है और समस्याएं पैदा कर सकती हैं।

अलग-अलग आवश्यकताओं के लिए इस सेट को जोड़ने के लिए आदेश:

  1. USB कीबोर्ड विक्रेता और उत्पाद आईडी को कमांड के आउटपुट के अनुसार बदला जाना चाहिए lsusb(उदाहरण के लिए, मेरे lsusbआउटपुट में मेरे USB कीबोर्ड के लिए यह है:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd )
  2. OWNER और सभी उपयोगकर्ता निर्देशिका नामों को "sadi" से दूसरे नाम में बदला जाना चाहिए
  3. Usbkbd_id को सही डिवाइस आईडी (उदाहरण के लिए, कमांड का आउटपुट xinput -list | grep "USB Keyboard"मुझे कुछ पंक्तियाँ देता है) को हथियाने के लिए थोड़े समायोजन की आवश्यकता हो सकती है ; ↳ USB Keyboard id=14 [slave keyboard (3)]और ↳ USB Keyboard id=16 [slave keyboard (3)], फिर awkदूसरे हिस्से में फ़ील्ड सीमांकक के रूप में "=" का उपयोग करके फ़िल्टर किया जाता है ; पहले दो अंक, और फिर पहली पंक्ति में केवल मान का उपयोग करते हुए)
  4. Usbkbd_layout का मान किसी अन्य मान्य विकल्प के रूप में हो सकता है

यह बहुत अच्छा होगा यदि एक अन्य समान स्क्रिप्ट स्वचालित रूप से चला सकती है जब भी एक यूएसबी कीबोर्ड प्लग किया जाता है, जैसा कि पूछा (अभी तक उत्तर नहीं दिया गया है): askubuntu.com/questions/284224/-
साडी

2
यह मददगार हो सकता है यदि आप इस गंदे धागे से बाहर एक और उत्तर पोस्ट कर सकते हैं: superuser.com/questions/249064/…
नैनो - मुझे

1
@MinimusHeximus धन्यवाद एक लाख !!! आपके द्वारा बताए गए धागे के माध्यम से जाने और कुछ ट्रायल-एंड-एरर करने के बाद, मैंने आखिरकार इसे सुलझा लिया है और ऊपर इस नए (लगभग) परफेक्ट हॉटप्लगिंग समाधान को जोड़ देगा!
सादी

1
किसी कारण से मेरे कीबोर्ड में दो आईडी हैं, इसलिए IFमुझे एक का उपयोग करने के बजाय एक का उपयोग करना पड़ा FOR। यह अब मेरे लिए काम करता है, धन्यवाद! gist.github.com/zvictor/193b567c14b5b6a679fe
zVictor

1
@ सादी मैं केवल एक औसत उपयोगकर्ता हूँ। मैं अपना समाधान यहाँ पोस्ट करूँगा। हो सकता है कि आप उससे कुछ विचार ले सकें।
13

9

कोई udv नियम के अंदर X11 ड्राइवर विकल्प निर्दिष्ट कर सकता है, कोई कस्टम स्क्रिप्ट की आवश्यकता नहीं है। एक उदाहरण के रूप में, यहाँ मेरी /etc/udev/rules.d/99-usb-kbd.rules की सामग्रियां हैं

ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2323", ENV{XKBMODEL}="pc104", ENV{XKBLAYOUT}="us", ENV{XKBVARIANT}="euro", ENV{XKBOPTIONS}="compose:caps"

यह नियम सुनिश्चित करता है कि एक विशेष यूएसबी कीबोर्ड Xorg में यूएस लेआउट का उपयोग करता है (मेरे लैपटॉप का आंतरिक कीबोर्ड जर्मन है, और यह मेरा प्राथमिक लेआउट भी है)। महत्वपूर्ण बिंदु:

  1. आप पता लगा सकते idVendorहैं और idProductउपयोग करके अपने डिवाइस की lsusbयाevtest
  2. आप किसी भी लेआउट का उपयोग कर सकते हैं /usr/share/X11/xkb/symbols। एक मान्य लेआउट और एक मान्य संस्करण दोनों को निर्दिष्ट करने पर ध्यान दें।
  3. सेटिंग्स में निर्दिष्ट सिस्टम चौड़ी सेटिंग्स को ओवरराइट करने के लिए फ़ाइल नाम को नंबर> 64 से शुरू करना चाहिए /lib/udev/rules.d/64-xorg-xkb.rules
  4. सुनिश्चित करें कि Gnome / KDE लेआउट प्रबंधन आपकी सेटिंग को अधिलेखित नहीं करता है।

अनप्लग करें और अपने कीबोर्ड को फिर से भरें और /var/log/Xorg.0.logसंभावित मुद्दों के लिए देखें। आप यह udevadm infoजांचने के लिए भी उपयोग कर सकते हैं कि सेटिंग्स सही ढंग से लागू हैं।
पावेल

यूरेका! वर्तमान gconf सेटिंग को ओवरराइड करने के लिए आपके स्मार्ट समाधान ने इस कमांड में प्रवेश करने के बाद ही काम करना शुरू किया gsettings set org.gnome.settings-daemon.plugins.keyboard active false:। यदि आप भी इस तरह के एक नोट को जोड़ते हैं, तो मैं आपको जवाब के रूप में चिह्नित करने की कोशिश करूँगा (बजाय उस अनाड़ी, लंबी और घुमावदार सड़क ;-)
साडी

यह असाधारण है। Ubuntu 14.04 पर संभावित मॉडल / लेआउट / विकल्प / आदि। /usr/share/X11/xkb/rules/evdev.lst
जॉन

2
दुर्भाग्य से इस अच्छे और आसान उपाय ने उबंटू ग्नोम 17.04 में
सादी

लिनक्स टकसाल 18.2 की कोशिश की, जो कि Ubuntu 16.04 LTS पर आधारित है, udev संस्करण 229-4ubuntu19 के साथ , फिर से कोई प्रभाव नहीं :-( इस विषम udev व्यवहार के बारे में कोई विचार ???
Sadi

2

मैंने बस इस समाधान को bépo Typematrix कीबोर्ड (अनुकूलित उत्कृष्ट dvorak का फ्रेंच संस्करण) के लिए और एक विस्तृत सिस्टम संदर्भ में सुधार किया है (यह मानता है कि आपके पास मशीन का रूट एक्सेस है)। इसे काम करने के लिए केवल 3 फाइलें चाहिए। आप असफलता के मामले में लॉगफाइल से परामर्श कर सकते हैं कि क्या विफल हो रहा है।

/etc/udev/96-usb-keyboard.rules

ATTRS{idVendor}=="1e54", ATTRS{idProduct}=="2030", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/etc/udev/bepo-typematrix-kbd.sh in"
ATTRS{idVendor}=="1e54", ATTRS{idProduct}=="2030", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/etc/udev/bepo-typematrix-kbd.sh out"

/etc/udev/bepo-typematrix-kbd.sh (इंटरमीडिएट स्क्रिप्टिंग का उपयोग करने के लिए बिल्कुल आवश्यक)

#!/bin/bash

dir=$(dirname $0)
command=$(basename $0)
command=$dir/${command%\.sh}
arg=$1 # must be "in" or "out"
LOG=/var/log/bepo-typematrix-kbd.log

[ -x "$command" ] && $command $arg >$LOG 2>&1 &

/ Etc / udev / Bepo-typematrix-kbd

#!/bin/bash
# jp dot ayanides at free.fr

MODEL="tm2030USB-102" # keyboard model
DISPLAY=':0.0'
GSETTING=/usr/bin/gsettings
XSET=/usr/bin/xset
SETXKBMAP=/usr/bin/setxkbmap
XINPUT=/usr/bin/xinput

USER=$(/usr/bin/who | /usr/bin/awk -v DIS=':0' '{if ($2==DIS) print $1}')
eval HOME=~$USER
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME

case $1 in
        'in')
                BEPO=$($XINPUT list --short | grep "TypeMatrix.com USB Keyboard" | grep keyboard | sed -e 's/^.*id=\([0-9]\+\).*/\1/g')
                if [ -n "$BEPO" ]; then
                        [ -x $GSETTING ] && $GSETTING set org.gnome.settings-daemon.plugins.keyboard active false
                        # apparently nothing to do with TDE (trinity KDE)
                        for ID in $BEPO; do # case of multiple bepo keyboard is taken into account
                                [ -x $SETXKBMAP ] && $SETXKBMAP -device $ID -model $MODEL -layout fr -variant bepo
                        done
                fi
                echo "bépo keyboard id(s) is (are) $BEPO"
                [ -x $XSET ] && $XSET -display $DISPLAY r rate 250 40
        ;;
        'out')
                # apparently nothing to do with TDE (trinity KDE)
                [ -x $GSETTING ] && $GSETTING set org.gnome.settings-daemon.plugins.keyboard active true
        ;;
        *)
                printf "wrong parameter: $1\n"
                exit 1
        ;;
esac

1

बहुत कुछ करने के बाद, मैं अब इसके लिए दौड़ रहा हूं। हो सकता है कि मैं एक तरह का पूरा लेख लिखूं और एक रिपॉजिटरी के भीतर कोड प्रकाशित कर दूं, अगर वह रुचि का होगा।


Udev के लिए एक नया नियम सेट करें जैसे:

 sudo gedit /etc/udev/rules.d/80-external-keyboard.rules

नियम को शेल स्क्रिप्ट को कॉल करने के लिए माना जाता है, जब भी किसी उपकरण को विक्रेता और उत्पाद आईडी के संयोजन के साथ कुछ कार्रवाई शुरू होती है।

ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="4042", RUN+="/home/phil/.bin/switch-kb-layout-wrapper.sh"

नया नियम सेट जोड़ने के बाद, udev सेवा को फिर से शुरू करें:

sudo service udev restart

नोट: मैं उस फ़ाइल में अधिक विशिष्ट मिलान नियम प्रदान करके विश्वसनीय परिणाम प्राप्त करने में सक्षम नहीं था। सबसे महत्वपूर्ण बात, एक ACTIONमिलान नियम जोड़ने से काम नहीं चला। जहाँ तक मैं बता सकता हूँ, पटकथा को वैसे भी ट्रिगर किया गया था। जोड़ते समयACTION=="add" , तो स्क्रिप्ट को डिवाइस को हटाने के बाद भी बुलाया जाएगा। बहुत अजीब और भ्रमित करने वाला।

हालाँकि , udev नियम को ट्रिगर करने वाली क्रिया को नीचे दी गई स्क्रिप्ट के अनुसार उपलब्ध स्क्रिप्ट में उपलब्ध किया जाएगा।


इसके बाद, स्क्रिप्ट ही। खैर, बिल्कुल नहीं। wrapperफ़ाइल नाम में प्रत्यय नोट करें। यह इंगित करता है कि यह वास्तविक स्क्रिप्ट नहीं है बल्कि एक आवरण है जो स्क्रिप्ट को कॉल करता है और इसे पृष्ठभूमि में निष्पादित करता है ताकि udev इस प्रक्रिया को समाप्त कर सके।

~/.bin/switch-kb-layout-wrapper.sh:

#!/bin/sh
/home/phil/.bin/switch-kb-layout.sh "${ACTION}" &

चर ACTIONमें डिवाइस द्वारा ट्रिगर की गई udev कार्रवाई शामिल है। यह मानों को पैदावार देता है जैसे add(डिवाइस प्लग किया गया था) और remove(डिवाइस को हटा दिया गया था)। हम बाद में इनका उपयोग करेंगे।

~/.bin/switch-kb-layout.sh:

#!/bin/sh

sleep 1

# Some environment variables that need to be set in order to run `setxkbmap`
DISPLAY=":0.0"
HOME=/home/phil
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME

udev_action=$1
log_file="$HOME/switch-kb-layout.log"

if [ "${udev_action}" != "add" ] && [ "${udev_action}" != "remove" ]; then
    echo "Other action. Aborting." >> $log_file
    exit 1
fi

internal_kb_layout="de"
internal_kb_variant=""

external_kb_layout="us"
external_kb_variant="altgr-intl"

kb_layout=""
kb_variant=""

if [ "${udev_action}" = "add" ]; then
    kb_layout=$external_kb_layout
    kb_variant=$external_kb_variant
elif [ "${udev_action}" = "remove" ]; then
    kb_layout=$internal_kb_layout
    kb_variant=$internal_kb_variant
fi

setxkbmap -layout "${kb_layout}"
echo "set layout:" "$kb_layout" >> $log_file
if [ ! -z "${kb_variant}" ]; then
    setxkbmap -variant "${kb_variant}"
    echo "set variant:" "$kb_variant" >> $log_file
fi

HOMEचर सेट करते समय मेरे उपयोगकर्ता नाम को अपने साथ बदलें ( $(whoami)यहां काम नहीं करेगा, क्योंकि यह आपके उपयोगकर्ता द्वारा नहीं बल्कि द्वारा कहा जाएगा root)।

sed -i "s/phil/YOUR_USERNAME/g" ~/.bin/switch-kb-layout.sh

परीक्षण के उद्देश्य के लिए, मैंने कुछ पंक्तियाँ जोड़ीं जो कुछ घटनाओं को मेरे घर निर्देशिका में एक फ़ाइल में लॉग करती हैं यह देखने के लिए कि क्या सब कुछ काम करता है। आप इन्हें आसानी से हटा सकते हैं।


अंत में, इन लिपियों के लिए निष्पादन की अनुमति होना आवश्यक है। यह भी ध्यान रखना महत्वपूर्ण है कि इन लिपियों को rootउपयोगकर्ता द्वारा बुलाया जाएगा , इसलिए सावधान रहें कि आप वहां क्या करते हैं।

chmod +x ~/.bin/switch-kb-layout-wrapper.sh ~/.bin/switch-kb-layout.sh 

1
धन्यवाद, महान काम! मैंने इसे काम भी कर लिया है। हालांकि, जब मैं 14 बार "एक्शन जोड़ें" और 3 बार "अन्य एक्शन" देखता हूं, जब मैं प्लगइन करता हूं तो मेरा बाहरी कमांड एक रहस्य है, जिसे मैं बाद में हल करने की कोशिश करूंगा। लेकिन मैंने पाया है कि setxkbmap कमांड में डिवाइस आईडी को जोड़ना बेहतर है, ताकि आंतरिक कीबोर्ड अभी भी उपयोग करने योग्य हो और बाहरी कीबोर्ड भी, जैसा कि मेरी नवीनतम ऑटोस्टार्टअप स्क्रिप्ट में है। मैं इसे कुछ दिनों के लिए आज़माऊंगा, और वापस आकर देखूंगा कि क्या तुम्हारा उत्तर माना जा सकता है, शायद यहाँ और वहाँ थोड़ा संशोधन के साथ ;-)
Sadi

इसके अलावा एक ही लॉग लाइनों कई बार हो रही है। कमांड पर डिवाइस आईडी पर अच्छी पकड़।
क्लेइनफ्रेन्ड

@ सादी मुझे भी लगता है कि स्क्रिप्ट के अनुसार ही लाइन gsettings set org.gnome.settings-daemon.plugins.keyboard active falseकाम नहीं करती है root। मेरे परीक्षणों में, लाइन का उस सेटिंग पर प्रभाव नहीं पड़ा।
क्लेनफ्रेन्ड

मुझे लगता है कि इस तरह के परिदृश्य में, gsettings set org.gnome.settings-daemon.plugins.keyboard active falseउपयोगकर्ता के रूप में एक बार और सभी के लिए कमांड निष्पादित करना एक अच्छा विचार हो सकता है , और फिर इस स्क्रिप्ट को gsettings setकमांड के बिना उपयोग कर सकते हैं ...
साडी

अब तक मैंने देखा है कि हम अभी भी इस चीज़ को आसानी से काम नहीं कर सकते हैं; समय-समय पर कीबोर्ड लेआउट udev द्वारा लागू नहीं किया जा रहा है, और आपको फिर से प्लग और प्लग करना होगा। मुझे लगता है कि मैं कुछ समय के लिए फिर से अपने जवाब के शीर्ष पर अपने (अद्यतन) स्टार्टअप स्क्रिप्ट पर जाऊंगा, जो मुझे और अधिक सुचारू रूप से कार्य करता है - केवल मुझे इसे मैन्युअल रूप से चलाना होगा यदि मैं स्टार्टअप के बाद अपने बाहरी कीबोर्ड में प्लग करता हूं। ऐसा लगता है कि udv थोड़ा बुग्याल है जैसा कि बहुत सारे एक्शन रिपिटिशन में भी देखा जा सकता है (यह कई बार रैपर स्क्रिप्ट चला रहा है, और अजीब तरीके से) ...
साडी

1

मुझे udv द्वारा निष्पादित स्क्रिप्ट के साथ कुछ अनुमति समस्या थी। मैं सूडो के साथ हल के रूप में हल:

# Estract id of MX3 keyboard devices that present themself as "123 COM Smart Control"
    IDLIST=$(sudo -u max /usr/bin/xinput -list | grep "123 COM Smart Control" | grep keyboard | sed -e 's/^.*id=\([0-9]\+\).*/\1/g')

प्रत्येक डिवाइस के लिए कीबोर्ड मैप सेट करें

    for ID in $IDLIST; do
            sudo -u max /usr/bin/setxkbmap -device $ID -layout "${kb_layout}" -display :0
    done

मुझे लगता है कि यह अधिक उपयोगी हो सकता है यदि आप इसे पूर्ण रूप से लिख सकते हैं। उदाहरण के लिए, आपने ऊपर लाइनें कहां रखी हैं?
सादी

0

आप इसे एक Xorg कॉन्फ़िग फ़ाइल में भी परिभाषित कर सकते हैं।

यह इस स्टैकएक्सचेंज उत्तर में दिया गया है: /superuser//a/946575/437492


यह बहुत अच्छा होगा, अगर मुझे यह काम मिल सके। लेकिन नवीनतम एलटीएस रिलीज, उबंटू 18.04 का उपयोग करते हुए, मैं केवल /usr/share/X11/xorg.conf.d/ निर्देशिका देख सकता हूं जिसमें 40-libinput.conf नामक फ़ाइल शामिल है । इसलिए मैंने बस उस फाइल में बाहरी कीबोर्ड के लिए एक सेक्शन जोड़ा। ड्राइवर libinput या evdev और लंबे और छोटे विक्रेता नाम का उपयोग करके , मुझे कोई परिणाम नहीं मिला। कोई विचार?
सादी

@ सादी: यदि आप Xorg कॉन्फ़िगरेशन के बारे में थोड़ा पढ़ते हैं, तो आप यह पता लगाएंगे कि आप बस नई फ़ाइलों को जोड़ सकते हैं /etc/X11/xorg.conf.d/(जो कि जाने की जगह है)।
गोल्लर रामबलर

धन्यवाद। मैं निश्चित रूप से काफी पढ़ा और पहले "/etc/X11/xorg.conf.d/30-keyboard.conf" का उपयोग करने की कोशिश की। मैं तब उपर्युक्त स्टैकएक्सचेंज उत्तर के तहत अपनी किस्मत आजमाऊंगा। ;-)
सादी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.