i3: วิธีใช้คีย์สื่อที่แสดงบนอุปกรณ์อินพุตแยกต่างหาก


1

ฉันได้ติดตั้งตัวจัดการหน้าต่าง i3 ข้างเดสก์ท็อป GNOME บน Ubuntu-GNOME 16.04 ฉันมีปัญหาในการทำให้ปุ่มสื่อของฉันทำงานกับแป้นพิมพ์ Logitech G610

ฉันมีดังต่อไปนี้ในของฉัน ~/.config/i3/config ไฟล์:

bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle

และยืนยันว่าคำสั่งเหล่านั้นทำงานในเทอร์มินัล ปัญหาที่ฉันเห็นคือ XF86AudioRaiseVolume กิจกรรม keypress ฯลฯ ไม่ได้ลงทะเบียน

ถ้าฉันใช้ xev -event keyboard เพื่อลองดูรหัสเมื่อฉันกดปุ่มมัลติมีเดียทั้งหมดที่ฉันได้รับมีดังต่อไปนี้:

MappingNotify event, serial 30, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeymapNotify event, serial 31, synthetic NO, window 0x0,
    keys:  1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

และจะไม่มีการรายงานรหัสคีย์เหมือนกับรหัสอื่น อย่างไรก็ตามการใช้ sudo showkey -kฉันได้รับดังต่อไปนี้ซึ่งเป็นค่าที่คาดหวัง:

keycode 113 press
keycode 113 release
keycode 115 press
keycode 115 release
keycode 114 press
keycode 114 release

วิ่ง xinputฉันเห็นดังต่อไปนี้

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Master                        id=12   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=15   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick             id=16   [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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Logitech Gaming Keyboard G610             id=10   [slave  keyboard (3)]
    ↳ Logitech Gaming Keyboard G610             id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]
    ↳ DELL Wireless hotkeys                     id=17   [slave  keyboard (3)]

ที่ซึ่งคีย์บอร์ด Logitech ปรากฏเป็นอุปกรณ์สองเครื่อง วิ่ง xinput list-props 10 และ xinput list-props 11 ฉันเห็นว่ารายการแรกแผนที่ไป /dev/input/event8ในขณะที่แผนที่ที่สองไป /dev/input/event9.

ถ้าฉันวิ่ง xinput test 10 ฉันเห็นว่ารายชื่อแรกสำหรับแป้นพิมพ์ของฉันตอบสนองต่อแป้นคีย์บอร์ดปกติทั้งหมด แต่ไม่ใช่ปุ่มมีเดียขณะที่ xinput test 11 ตอบสนองเฉพาะกับปุ่มสื่อ:

key press   121 
key release 121 
key press   123 
key release 123 
key press   122 
key release 122

(สิ่งเหล่านี้ถูกปิดด้วย 8 จาก showkey เอาต์พุต แต่เห็นได้ชัดว่าคาดว่า นอกจากนี้ค่าเหล่านี้ตรงกับเอาต์พุตการแม็พด้วย xmodmap -pkeเช่น keycode 121 = XF86AudioMute NoSymbol XF86AudioMute ) วิ่ง sudo evtest /dev/input/event8 และ sudo evtest /dev/input/event9 ให้ผลลัพธ์ที่คล้ายกัน

ดังนั้นความเข้าใจของฉันเกี่ยวกับกระบวนการระหว่างการกดปุ่มและการจัดการนั้นค่อนข้างคลุมเครือ แต่ดูเหมือนว่าข้อเท็จจริงที่ว่าปุ่มปกติและปุ่มสื่ออยู่บนอุปกรณ์ป้อนข้อมูลที่แตกต่างกันทำให้เหตุการณ์สื่อปุ่มกดไม่สามารถผ่านไปยังเซสชัน X ได้ โดยไม่แสดงผลสำหรับ xev?) ดังนั้นจึงไม่ผ่าน i3 ทำงานได้ดีสำหรับเดสก์ท็อป GNOME ดังนั้นฉันต้องกำหนดค่าบางอย่างเพื่อให้ทำงานกับ i3 ได้หรือไม่ ฉันกำลังสูญเสียวิธีการดำเนินการจากที่นี่ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

แก้ไข

ฉันเคยมีคำพูดเกี่ยวกับคำสั่งใน ~/.config/i3/config ไฟล์ แต่นั่นไม่ได้ ฉันได้แก้ไขด้านบนเพื่อแก้ไขให้ถูกต้อง แต่นั่นไม่ใช่สาเหตุของปัญหา

คำตอบ:


1

ตามข้อมูลที่ให้ไว้ใน คำตอบก่อนหน้า ฉันวิ่ง ps และสังเกตว่า gnome-session ทำงานแม้ว่าฉันจะไม่ได้ลงชื่อเข้าใช้เดสก์ท็อป GNOME ตั้งแต่เริ่มระบบและลงชื่อเข้าใช้ i3 เท่านั้น ความสงสัยของฉันคือเซสชั่นคำพังเพยกำลังขโมยกิจกรรม แต่การยกเลิกการกดแป้นพิมพ์ลัดเหล่านั้นในการตั้งค่า GNOME ดูเหมือนจะไม่เปลี่ยนแปลงอะไรเลย

ทางออกของฉันคือการบูตโดยตรงในเซสชั่น tty ทำตามคำแนะนำ ที่นี่ , ดังนั้น gnome-session ไม่เริ่ม ฉันสร้างไฟล์ ~/.xinitrc มีบรรทัดเดียว exec i3จากนั้นหลังจาก bootup ฉันเข้าสู่ terminal tty และเรียกใช้ startx เพื่อเปิด i3 ด้วยวิธีนี้ gnome ไม่ทำงานและตอนนี้คีย์มีเดียของฉันใช้งานได้แล้ว


อัปเดต: เริ่มต้น i3 ด้วยเพียง exec i3 ในของฉัน ~/.xinitrc ไฟล์ก่อให้เกิดปัญหาบางอย่างกับ dbus ที่ทำให้สิ่งต่าง ๆ เช่น terminal ของฉันใช้เวลา 6 วินาทีในการเปิด สำหรับใครก็ตามที่อาจใช้วิธีนี้เปลี่ยนเนื้อหาของ ~/.xinitrc ไปยัง exec dbus-launch --exit-with-session i3 ดูเหมือนว่าจะมีการแก้ไข
dpkoch

0

คำตอบบางส่วน:

การที่คีย์บอร์ดปรากฏเป็นอุปกรณ์สองเครื่องนั้นไม่มีปัญหา อุปกรณ์ทั้งสองถูกกำหนดให้กับ Virtual Core Keyboard ดังนั้นอุปกรณ์ทั้งสองควรสร้างเหตุการณ์หลักที่เหมาะสม

MappingNotify เหตุการณ์อาจบ่งบอกว่าแอปพลิเคชั่นบางตัวตอบสนองต่อปุ่มสื่อ โดยเฉพาะถ้าคุณได้รับ FocusOut และ FocusIn กิจกรรมที่คุณไม่ได้แสดงให้เราเห็นจากนั้นแอปพลิเคชั่นอื่น ๆ กำลังดำเนินการกับกิจกรรมเหล่านั้นอย่างแน่นอน

ตอนนี้อาจเป็นตัวจัดการหน้าต่าง i3 ด้วยคีย์ที่กำหนดค่าไว้หรืออาจเป็นอย่างอื่น ดังนั้นสิ่งแรกที่ต้องทำการทดสอบคือการลบหรือใส่เครื่องหมายออกจากการผูก i3 ของคุณทดสอบอีกครั้งและดูว่าคุณยังคงได้รับเหตุการณ์การแมป / โฟกัส

ถ้าใช่ขั้นตอนต่อไปคือการพิจารณาว่าแอปพลิเคชันใดกำลังขโมยมัน ใช้ ps, xlsclients ฯลฯ เพื่อ จำกัด ให้แคบลง วิธีหนึ่งคือการฆ่า / ปิดการใช้งานแอปพลิเคชันจนกว่าพวกเขาจะไม่ถูกขโมยอีกต่อไป


ข้อมูลที่ดีขอบคุณ ฉันไม่สามารถหาข้อมูลได้มากนัก xlsclientsเนื่องจากดูเหมือนว่าจะแสดงรายการแอปพลิเคชันที่ใช้งานอยู่ในเซสชัน i3 ปัจจุบันของฉัน อย่างไรก็ตามการใช้ ps ฉันสังเกตเห็นว่า gnome-shell ยังคงทำงานอยู่ฉันได้ให้ ตอบ อธิบายวิธีจัดการกับสิ่งนั้น
dpkoch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.