سؤال

نسخة مختصرة لما أريد تحقيقه:لدي دواسة قدم (INFINITY-IN-USB-1، إذا كان ذلك ذا أهمية) يتم تطبيقها كجهاز HID عام، وأود أن تعمل كمفاتيح تحكم وبديل على نظام التشغيل Linux.أبحث عن شيء ما على المستوى X، أي.وليس فقط البرامج الفردية.

نسخة أطول:لدي هذا الإعداد يعمل في نظام التشغيل Windows XP عن طريق استدعاء dll RegisterRawInputDevices وGetRawInputData والاستماع إلى الإدخال في النوافذ المخفية.يتم إنجاز كل شيء بطريقة واضحة إلى حد ما مفتاح التشغيل السريع البرنامج النصي (يمكن النشر هنا إذا كان أي شخص مهتمًا).النقطة المهمة هي أنه ليست هناك حاجة لأي سائق إضافي، وما إلى ذلك؛هناك حاجة فقط إلى ملفات Windows dll الأصلية.

أريد أن يعمل هذا الإعداد على نظام Linux (وبشكل أكثر تحديدًا Gnome ضمن Ubuntu، لكنني أحيانًا أستخدم مدير توزيعات/نوافذ آخر، لذا فإن الحل على مستوى X موضع تقدير).لا تسجل دواسة القدم هذه نفسها على أنها لوحة مفاتيح أو حتى عصا تحكم، ولكن كجهاز HID مع الاستخدام، الصفحة 12، الاستخدام 3.لاحظت أن أحدث إصدار من Ubuntu يمكنه اكتشاف واستخدام المفاتيح المفضلة على Microsoft Natural Keyboard، والتي يتم تسجيلها أيضًا كجهاز HID*.أستخدم هذه المفاتيح على نظام التشغيل Windows باستخدام نفس الطريقة التي أستخدم بها دواسة القدم (أي.بدون البرامج المجمعة).لذلك أفترض أن هذا الشيء الدواسة يمكن أن يعمل على نظام التشغيل Linux أيضًا، ولكن السؤال هو كيف؟

[أنا جديد على العناصر ذات المستوى الأدنى في Linux، لذا يرجى أن تكون سخيًا مع روابط المقدمة أو البرنامج التعليمي حيثما أمكن ذلك.]

* بالنسبة لأولئك الذين لا يعرفون ذلك، يتم تسجيل لوحة المفاتيح Microsoft Natural Keyboard على أنها لوحة مفاتيح عادية وجهاز HID عام.بدون معرفة بعض التطبيقات (مثل التطبيق المجمع) كيفية تفسير إدخال HID، ستعمل المفاتيح العادية ولكن المفاتيح المفضلة ومفاتيح الوظائف الخاصة عديمة الفائدة.


للتوضيح، نظام التشغيل Linux لا يرى الضغط على الدواسة كمدخل.إنه يتعرف على جهاز USB، لكن xev لا يعطي أي إخراج للضغط على الدواسة.لقد رأيت تقارير عن أشخاص نجحوا في استخدام الدواسة ضمن WINE لبرنامج النسخ، ولكن هذا يجب أن يعمل بطريقة Windows ولا يعطي ما أريد (مما يجعل الدواسة تبدو وكأنها لوحة مفاتيح لجميع تطبيقات Linux الأصلية).أتساءل ما إذا كانت هناك حاجة إلى بعض برنامج تشغيل لوحة مفاتيح Linux منخفض المستوى؟


إليك بعض المعلومات الإضافية:إذا قمت بإصدار هذا في المحطة

cat /dev/usb/hiddev0

(dev/usb/hiddev0 هي الدواسة الخاصة بي)، أحصل على رموز أولية تتوافق مع ضغطات الدواسة الخاصة بي.هذه بداية.أعرف ماذا تعني هذه التعليمات البرمجية الأولية:في النظام الثنائي، 0001، 0010، 0100 يتوافق مع كل دواسة، على التوالي، وترسل مجموعة ضغطات الدواسة مجموعة من تلك الأرقام الثنائية، وإصدارات مدخلات مشغل الدواسة لأي دواسة لا تزال مضغوطة (إذا تم رفع جميع الدواسات، يتم إرسال 0000) .

كيف يمكنني الحصول على X للاستماع إليها dev/usb/hiddev0 وترجمة الرموز الأولية إلى رمز مفتاح خاص حتى أتمكن من تعيينها باستخدام xmodmap أو شيء من هذا القبيل؟

هل كانت مفيدة؟

المحلول

وأنت تريد uinput. سوف تستمع في صفحة / ديف / USB / hiddev0 ثم قم بإنشاء الأحداث الجديدة التي سوف ترسل في /dev/input/uinput.

وهذا ما يفسر ذلك ويعطي القليل من البرنامج التعليمي: عن طريق uinput سائق في Linux- 2.6. س لإرسال إدخال المستخدم {<م> هذا هو "لوحة" قضية نشر في EInfochips "يناير 2007" نصيحة الشهر "المادة المذكورة على <لأ href =" http://web.archive.org/web /20100407043556/http://www.einfochips.com/newsletters/jan_07.html "يختلط =" نوفولو noreferrer "> هذا الصفحة المحفوظة }.

نصائح أخرى

هل يظهر الجهاز حتى في / ديف / الإدخال؟ إذا كان كذلك، استخدام "evdev" X سائق لوصل الأمر مثلما كنت تفعل لوحة المفاتيح أو الماوس.

ويجب التحقيق lircd. فإنه يفسر مدخلات من أجهزة التحكم عن بعد. بعض أجهزة التحكم عن بعد دعم يقدم على ما يبدو نفسها كأجهزة اختبأ العامة، لذلك قد تكون قادرة على الحصول على الجهاز لاجراء محادثات مع lircd.

نفس المشكلة هنا، ولكن مع مفاتيح خاصة على لوحة المفاتيح اللاسلكية.أشعر بألمك.

على أي حال، في محاولة لجعل هذا يعمل، إليك طريقتي:

  1. sleep 10; killall cat ثم بسرعة في محطة أخرى: cat /dev/usb/hiddevice0 > key1.usbdump واضغط/استخدم الجهاز.سيؤدي هذا إلى تفريغ الإخراج الثنائي للجهاز المخفي لهذا المفتاح.
  2. لقد قمت بسرعة باختراق نص برمجي بلغة python لقراءة أحداث الإدخال وإطلاق النار في جهاز hiddevice.حتى الآن يعمل لأول مرة يتم الضغط على المفتاح.هذا مشابه لما اقترحه آدم، لكنني أعتقد أن uinput أكثر صعوبة في البرمجة/الاستخدام على الرغم من أنه ربما يكون أكثر أناقة، كما أن لغة python متاحة بسهولة.

إذن هذا عمل قيد التقدم (يعمل فقط عند الضغط عليه للمرة الأولى)، ولكن ربما يكون شيئًا كهذا مناسبًا لك:

sf1 = open("test.usbdump").read() # read the earlier usb dump from hiddevice
kb = open("/dev/usb/hiddev0")
while 1:
    # Prints true if the specific key has been read.
    print (kb.read(len(sf1)) == sf1)
    # Basically all that has to be done is if ^ is true, then fire off the event you want.

إذا كان بإمكان أي شخص مساعدتي في برنامجي أو إذا كنت أفعل هذا بشكل خاطئ، فيرجى إخباري.;)

أدرك أن هناك بعض الرؤوس التي تم تضمينها في التفريغ الأولي للجهاز المخفي.باستخدام بعض التعديلات السداسية واختلاف البتات، يمكنك العثور على القيم المهمة وإجراء فحص لها في بايثون.(على سبيل المثال، الرقم السداسي "B0" يعني أنه تم الضغط على مفتاح وظيفة خاص على لوحة المفاتيح، وبعد ذلك يوجد المزيد من المعلومات حول المفتاح الذي تم الضغط عليه وما إلى ذلك.)

النتيجة النهائية لي هي هذه:يبدو أن hiddevice0 يتعطل ويتوقف عن تقديم البيانات بعد فترة، لست متأكدًا من السبب، ولكن بدلاً من ذلك، أستخدم /dev/input/event* (قد يناسبك أيضًا،) ويبدو أن هذا يعمل بشكل أفضل.مرة أخرى، يؤدي نفس التحليل السداسي والتحليل منخفض المستوى إلى النجاح.على طول الطريق وجدت ذلك sudo cat /dev/input/event3 | hexdump مفيد للغاية في تحديد البايتات المهمة بالنسبة لك.

لذا، إذا كان لديك لوحة مفاتيح Sk-8812 IBM، وترغب في استخدام المفاتيح الخاصة، يمكنك التحدث معي للحصول على البرنامج النصي الذي استخدمته.

وكتبت عن كيفية حصولي على إنفينيتي IN-USB-1 (ويعرف أيضا باسم "المزيد USB FOOTPEDAL") لإرسال keysyms تعسفية تحت X على بلدي مدونة:

استخدام VEC / إنفينيتي USB دواسة القدم بمثابة لوحة المفاتيح لينكس

(وينبغي أيضا العمل من أجل IN-USB-2، وربما بعض النماذج تحكم USB القدم الأخرى التي تباع من قبل مركزنا والهندسة P.I. واستنساخ لها).

وهنا هو نسخة مختصرة:

الحصول على X للتعرف على دواسة

ودواسة هو جهاز USB-HID ومتوافقة مع نواة ليس لديه مشكلة اكتشاف ذلك، وجعل أحداثها المتاحة لمساحة المستخدم عبر عقدة /dev/input/eventX. أن نرى أن تتمكن من تشغيل برنامج evtest (على ديبيان: sudo apt install evtest). حتى لا <م> الحاجة للذهاب إلى المستوى HID لاستخدام دواسات القدم.

والمشكلة هي أن ديف لا علامة على أنها لوحة المفاتيح أو الماوس، بحيث X يتجاهل ذلك. يمكن حل هذه مع ملف القاعدة ديف من سطر واحد (بفضل Parlatype المطور غابور Karsay لتوفير هذا الحل في Parlatype العدد 28 ):

ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{idVendor}=="05f3", ATTRS{idProduct}=="00ff", ENV{ID_INPUT_KEYBOARD}="1"

ووضع هذا الخط في ملف يسمى /etc/udev/rules.d/10-vec-usb-footpedal.rules. لا حاجة لإعادة تشغيل أي شيء، وديف يجب الكشف عن الملف تلقائيا.

والآن عندما كنت افصل وreplug دواسة USB، ينبغي الاعتراف من قبل X (وإرسال الأحداث زر الماوس). للتحقق من تشغيل xev.

تغيير الخريطة keysyms مع ديف hwdb

وجود دواسة أن يرسل نقرات الماوس الوحيدة ربما لا ما تريد. هذا رمز أساسي بعث بها مفاتيح دواسة يمكن رسم مع ملف ديف hwdb.

وإنشاء ملف تحت /etc/udev/hwdb.d/ (أنا وضعت الألغام في /etc/udev/hwdb.d/60-usb-footpedal.hwdb) التي تحتوي على هذه السطور: /etc/udev/hwdb.d/60-usb-footpedal.hwdb

evdev:input:b*v05F3p00FF*
 KEYBOARD_KEY_90001=f14
 KEYBOARD_KEY_90002=f15
 KEYBOARD_KEY_90003=f16

وهذه المرة نحن بحاجة إلى إعلام النظام لتحديث ملف hwdb ثنائي:

$ sudo systemd-hwdb update

وثم افصل وrepug الجهاز.

والسطر الأول من الملف hwdb مباريات الجهاز لدينا (05F3 بائع، 00FF المنتج)، وخطوط لاحقة تعيين scancode (عرافة) إلى الرمز الرئيسي. اخترت مفاتيح F14، F15، F16 وظيفة، ولكن يتم تعريف قائمة كيكوديس المتاحة في <لأ href = "https://github.com/torvalds/linux/blob/master/include/uapi/linux/input- حدث codes.h "يختلط =" نوفولو noreferrer "> / البيرة / وتشمل / لينكس / المدخلات وحدث codes.h . استخدام أسماء #defined في هذا الملف كما كيكوديس hwdb، ببساطة تحويلها إلى أحرف صغيرة وإزالة البادئة key_.

والافتراضي (كمبيوتر + لنا) XKB تخطيط لوحة المفاتيح على بلدي خرائط الكمبيوتر F14، F15، وF16 إلى XF86Launch5، XF86Launch6، وkeysyms XF86Launch7، على التوالي. إذا قمت بفتح xev الآن واضغط على الدواسات، يجب أن تشاهد تلك keysyms المنبعثة. استخدام هذه keysyms، كل التبديل دواسة يمكن تعيين كما هوتكي في سطح المكتب أو نافذة مدير.

ويمكنك أيضا إعادة رسم خريطة keysyms XF86* إلى مفاتيح أخرى باستخدام شيء من هذا القبيل xmodmap. لمزيد من التفاصيل، بما في ذلك الحصول على مفاتيح لتكون mappable في همة، المزيد من الروابط إلى وثائق، مؤشرات نحو قراءة الجهاز لمبات مباشرة إذا كنت تريد، وإيجاد حل لنظام التشغيل Mac OS X، أرى <لأ href = "HTTP: // catswhisker .xyz / تسجيل / 2018/8/27 / use_vecinfinity_usb_foot_pedal_as_a_keyboard_under_linux / "يختلط =" نوفولو noreferrer "> مدونة آخر

Footcontroller

وآخر شيء واحد سوف أذكر هو برنامج الثعبان يسمى footcontroller الذي يقرأ الأحداث من evdev يمكن تكوين جهاز (/ ديف / الإدخال / eventX) وإصدار ضربات الرئيسيوفاق (عبر xdotool) أو تشغيل البرامج النصية ردا على ندوس على الدواسات. ويمكن استخدامه بدلا من xmodmap للحصول على دواسة لإرسال أي السكتة الدماغية الرئيسية التي تريد.

وأنا استخدم لبلدي ملزمة / shorcuts مزيج من تطبيق Compiz، easystroke وxmacro.

لاحتياجاتك، وأعتقد أن القطعة المفقودة هو xbindkeys. لقد وجدت هذا الرابط لك أنه ربما يساعدك على إعداد هذا:

http://linux-trackball.dreamhosters.com/

وأتساءل على أي حال ما إذا كانت هناك وسيلة للتمييز بين عدة أجهزة الماوس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top