আমি কীভাবে একটি মাউস বোতামের কীবোর্ড কীটি স্থিরভাবে ম্যাপ করব?


14

প্রশ্নের সংক্ষিপ্তসার: আমি চাই যে আমার মাউস বোতামগুলির মধ্যে একটি Super_Lএক্স 11 দ্বারা বাম উইন্ডোজ বোতাম হিসাবে নিবন্ধিত হোক ।


আমার উইন্ডো ম্যানেজারে, আমি "বাম উইন্ডোজ বোতাম" (বাম সুপার) ধরে এবং বাম মাউস বোতামের সাহায্যে উইন্ডোটি টেনে এনে উইন্ডোগুলিকে চারপাশে সরাতে পারি। আমি কীবোর্ডটি স্পর্শ না করেই এটি করতে সক্ষম হতে চাই, সুতরাং আমি মাউস বোতাম 11-তে বাম দিকের সুপার কীটি মানচিত্র করতে চাই, এইভাবে আমি মাউস বোতাম 11 টি ধরে রাখতে এবং উইন্ডোজ + ড্রাগ করতে ক্লিক করতে পারি।

সর্বাধিক সুস্পষ্ট সমাধান xbindkeys এবং xte এর মতো ব্যবহার করে ( .xbindkeysrc):

"xte 'keydown Super_L'"
  b:11

"xte 'keyup Super_L'"
  b:11 + release

এটি এর মতো কাজ করে:

  • আমি যখন মাউস বাটন 11 ঠাসা, Super_Lএছাড়াও নিচে চাপা হয়
  • আমি যখন মাউস বোতাম 11 রিলিজ করি Super_Lতখনও প্রকাশিত হয়

কিন্তু একটা সমস্যা আছে: আমি ব্যবহার জানালা সরাতে পারবেন না Super_L+ + Mouse1যদি আমি অন্য মাউস বাটন চেপে ধরে করছি, মাউস বোতাম 11. মত সমাধান উপরে ব্যবহার করে, যেমন চাপ মুক্তি মাউস বাটন 11 এখনও নিবন্ধিত হচ্ছে, এবং তাই কেউই উইন্ডো ম্যানেজার অপারেশন কাজ।

আমি এই চেষ্টা করেছি উভয় দারুচিনি এবং জট্টিল শর্তাবলীবুঝতে, এবং ব্যবহার একেবারে কেউই এর Super_Lনিচে অনুষ্ঠিত হচ্ছে কীবোর্ড সমন্বয় কাজ করার সময় মাউস বোতাম 10 বা 11।

একটি সাবপার হ্যাক

আমি বর্তমানে মাউস 11 টির কারণে Super_Lনির্দিষ্ট সময়ের জন্য বোতামটি ধরে রাখতে এই সমস্যাটি নিয়ে কাজ করছি । এইভাবে আমি মাউস বোতামটি ক্লিক করতে পারি , তারপরে একটি সংক্ষিপ্ত সময়ের জন্য জিনিসগুলি প্রায় টেনে আনতে পারি:

"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
  b:11

আর একটি প্রয়াস

টোটির পরামর্শ অনুসারে, আমি এই xbindkeysকনফিগারেশনটি চেষ্টা করেছি :

"xte 'mouseup 10' 'keydown Super_L'"
  b:10

"xte 'keyup Super_L'"
  b:10 + Release

এটি কাজ করে না। মনে Super_Lহচ্ছে কীটি চেপে রাখা হয়েছে, কারণ আমি বোতাম 10 প্রকাশের সাথে সাথেই এটি চিরতরে ধরে থাকবে (আমি Super_Lকী- বোর্ডে কীটি আবার চাপ না দেওয়া পর্যন্ত ) তবে মাউস বোতামটি এখনও নিবন্ধীকৃত রয়েছে, কারণ আমি উইন্ডোগুলিকে ক্লিক করতে এবং টেনে আনতে পারি না । আমি মনে করি না আমি এই কাজ ব্যবহার করতে সক্ষম হতে যাচ্ছি না xbindkeysএবং xte


1
সুপার কীতে মাউস বোতামটি বাঁধার পরিবর্তে পুনরায় রিম্যাপিং করুন। এই জন্য xmodmap ব্যবহার করুন । সম্পূর্ণ সেটআপের জন্য আর্কি উইকি এক্সমোডম্যাপ পৃষ্ঠাটি দেখুন।
টোটাই

@ টট্টি: খিলান উইকি এক্সমোডম্যাপ পৃষ্ঠায় কী কীভাবে অন্য কীগুলিতে কী মানচিত্র করা যায়, কী কী পরিবর্তনকারী কী কীভাবে অদলবদল করতে হয় এবং কীভাবে স্ক্রোলিংকে বিপরীত করা যায় তা বর্ণনা করা হয়েছে - তবে এতে মাউস বোতামগুলিতে কীবোর্ড কী ম্যাপিংয়ের উল্লেখ নেই
হুব্রো

@ টট্টি: এক্সমোডম্যাপের সাহায্যে আমি অন্যান্য কীগুলির কীগুলি ম্যাপ করতে পারি এবং এক্স (এবং xkbset) এর জন্য এক্সকেবি এক্সটেনশনের সাহায্যে আমি কীবোর্ড কীগুলিতে মাউস বোতামগুলি ম্যাপ করতে পারি, তবে আমি একটি মাউস বোতামে একটি কীবোর্ড কী ম্যাপ করার চেষ্টা করছি। আমি এখনও এটি করার উপায় খুঁজে পাইনি।
হুব্রো

চেষ্টা করুন: মাউস বোতাম 11 হোল্ডে, সুপার হোল্ড + মাউস বোতাম 11 রিলিজ অনুকরণ করুন। উইণ্ডো ম্যানেজার এখন সুপার সনাক্ত & মাউস 1 নাও হতে পারে মাউস 11.
Totti

@ টট্টি: চেষ্টা করা, এবং সম্পাদিত প্রশ্ন
হুব্রো

উত্তর:


5

একটি আসকবুন্টু পোস্টে একটি উত্তর রয়েছে যা আমি নীচে সংক্ষিপ্ত করব।

সমস্যাটি হ'ল এক্সবাইন্ডকিগুলি পুরো মাউসকে ধরে ফেলে, মোডিফারগুলি তৈরি করে + মাউস ক্লিক ম্যাপিংটিকে অনিশ্চিত করে তোলে। থাম্ব বোতামটি ক্লিক করে ভার্চুয়াল কীবোর্ডে কীটি প্রেরণ করতে উত্তরটি পাইথন-ইউনপুট স্ক্রিপ্টের মাধ্যমে ইউনপুট/dev/my-mouse ব্যবহার করে Ctrl। এখানে বিস্তারিত পদক্ষেপ রয়েছে:

1. উদেব বিধি তৈরি করুন

মাউসের জন্য, ফাইল /etc/udev/rules.d/93-mxmouse.conf.rules:

KERNEL=="event[0-9]*", SUBSYSTEM=="input", SUBSYSTEMS=="input", 
ATTRS{name}=="Logitech Performance MX", SYMLINK+="my_mx_mouse", 
GROUP="mxgrabber", MODE="640"

উদেব ইভেন্ট 5 এর মতো নাম সহ কার্নেল ডিভাইসগুলি সন্ধান করবে। SYMLINK হ'ল মাউসটি সন্ধানের জন্য /dev/my_mx_mouseযা গ্রুপ দ্বারা পাঠযোগ্য mxgrabber

হার্ডওয়্যার তথ্য খুঁজতে কিছু চালান:

udevadm info -a -n /dev/input/eventX

ইউনপুতের জন্য, ফাইল /etc/udev/rules.d/94-mxkey.rules:

KERNEL=="uinput", GROUP="mxgrabber", MODE="660"

আপনার মাউসটিকে আনপ্লাগ এবং প্লাগ করুন, বা নিয়মাবলী দিয়ে ট্র্যাক করতে ওদেবকে বাধ্য করুন udevadm trigger

২. ইউএনপুট মডিউলটি সক্রিয় করুন

sudo modprobe uinput

এবং এর মধ্যে /etc/modules-load.d/uinput.conf:

uinput

৩. নতুন গ্রুপ তৈরি করুন

sudo groupadd mxgrabber
sudo usermod -aG mxgrabber your_login

4. পাইথন লিপি

ইনস্টল করুন python-uinput libraryএবং python-evdev library

নীচের স্ক্রিপ্টটির বোতামের ইভেন্ট কোডটি সনাক্তকরণ প্রয়োজন:

#!/usr/bin/python3.5
# -*- coding: utf-8 -*-

"""
Sort of mini driver.
Read a specific InputDevice (my_mx_mouse),
monitoring for special thumb button
Use uinput (virtual driver) to create a mini keyboard
Send ctrl keystroke on that keyboard
"""

from evdev import InputDevice, categorize, ecodes
import uinput

# Initialize keyboard, choosing used keys
ctrl_keyboard = uinput.Device([
    uinput.KEY_KEYBOARD,
    uinput.KEY_LEFTCTRL,
    uinput.KEY_F4,
    ])

# Sort of initialization click (not sure if mandatory)
# ( "I'm-a-keyboard key" )
ctrl_keyboard.emit_click(uinput.KEY_KEYBOARD)

# Useful to list input devices
#for i in range(0,15):
#    dev = InputDevice('/dev/input/event{}'.format(i))
#    print(dev)

# Declare device patch.
# I made a udev rule to assure it's always the same name
dev = InputDevice('/dev/my_mx_mouse')
#print(dev)
ctrlkey_on = False

# Infinite monitoring loop
for event in dev.read_loop():
    # My thumb button code (use "print(event)" to find)
    if event.code == 280 :
        # Button status, 1 is down, 0 is up
        if event.value == 1:
            ctrl_keyboard.emit(uinput.KEY_LEFTCTRL, 1)
            ctrlkey_on = True
        elif event.value == 0:
            ctrl_keyboard.emit(uinput.KEY_LEFTCTRL, 0)
            ctrlkey_on = False

5. সমাপ্তি

পাইথন ফাইলকে এক্সিকিউটেবল করে তুলুন এবং এটি শুরুতে লোড হয়েছে তা নিশ্চিত করুন।


আমি মাউস বোতাম একটি অব্যবহৃত keycode দায়িত্ব অর্পণ করা স্ক্রিপ্ট আপডেট করেছি (আমি তাদের সেট আপ F13, F14এবং F15, এবং ব্যবহার মাউস ফাংশন নিষ্ক্রিয় xinput। তারপর আমি কেবল ঐ চাবিগুলা যাই হোক না কেন আমি একটি সহজ ব্যবহার প্রয়োজন reassign পারেন xmodmap। মূল ধারণা ড্রাফট করা হয় মধ্যে একটি সারকথা (কিছু হার্ডকোডেড মান এবং আমি পুনঃস্থাপন না xinputমাউস ফাংশন পরে) উপর এখানে যখন এটি সম্পন্ন করা হবে, আমি স্ক্রিপ্ট চূড়ান্ত সংস্করণ সঙ্গে এই সম্পর্কে একটি ব্লগ পোস্টে করব (এবং লিঙ্ক ভাগ করুন। ধন্যবাদ আপনি আপনার সহায়তার জন্য! ☺ ♥
zmo


1

আপনি মাউস ক্লিকে স্ক্রিপ্ট চালাতে পারেন, আপনি নিম্নলিখিত কৌশলটি ব্যবহার করতে পারেন।
1. প্রেস বাটন 11 থেকে রাখা সুপার চাবি । ( বাটন 11 trigers একটি স্ক্রিপ্ট)
2. সরান উইন্ডোজ অন্যান্য মাউস বাটন ব্যবহার করে
3. প্রেস মাউস বাটন 11 আবার মুক্তি সুপার চাবি

স্ক্রিপ্ট সুপার কী ধরে রাখতে
ব্যবহার করুন প্রথম বোতামে ক্লিক করুন, একটি অস্থায়ী ফাইল তৈরি করুন এবং কী ধরে রাখুন। পরবর্তী ক্লিকে টিএমপি ফাইলটি মুছুন এবং কীটি প্রকাশ করুন, xdotool

হালনাগাদ

উবুন্টু সহায়তা পৃষ্ঠা অনুসারে (অনেকগুলি বোতামের মাউস কীভাবে) imwheelকীতে পুনরায় তৈরি করতে পারে।


এটি নিয়ে বেশ কয়েকটি সমস্যা: # 1 এটি এখনও অন্য হ্যাক / ওয়ার্কআরউন্ড এবং প্রশ্নের উত্তর দেয় না। সুপার কী চেপে ধরে রাখার সময় # 2 এক্সবিন্দকিগুলি কাজ করে না। এটি এমন কি যেন এক্সবিন্ডকিজ বিরতি দিয়ে থাকে এবং সুপার কীটি প্রকাশ না হওয়া অবধি কোনও কিছুই নিবন্ধভুক্ত করে না।
হুব্রো

ঠিক আছে, প্রায় 5 মিনিট গবেষণার পরে, আমি পয়েন্ট # 2 প্রত্যাহার করি। + Mod4সুপার কী চেপে ধরে রাখার জন্য অ্যাকাউন্টে আমাকে এক্সবিন্দকি কনফিগারেশনে দৃশ্যত যুক্ত করতে হবে। আপনার প্রস্তাবিত কর্মক্ষেত্রটি আমার চেয়ে ভাল এবং আমি এতে স্যুইচ করছি :-) তবে এটি এখনও প্রশ্নের উত্তর দেয় না।
হুব্রো

1

ডিবাগিংয়ের পরামর্শ: /dev/input/eventXআপনি সেই বোতামটি টিপুন এবং ছেড়ে দিলে কোন ইভেন্টগুলি উত্পন্ন হয় তা দেখার জন্য আমি ফাইলটি পর্যবেক্ষণ করার চেষ্টা করব , বিশেষত সাথে সংমিশ্রণে BTN_LEFT। আপনাকে শুরু করার জন্য এখানে একটি নমুনা কোড। আপনাকে কেবলমাত্র চাপের চাপ নয়, সমস্ত ইভেন্ট লগ করার জন্য অবশ্যই এটি সংশোধন করতে হবে।

আপনি xevযদি ইতিমধ্যে না করে থাকেন তবে আপনি আউটপুটও দেখতে চাইতে পারেন। উভয় লগ বিশ্লেষণ করলে আপনার সঠিক সমস্যাটি প্রকাশিত হওয়া উচিত।

সম্ভাবনা হ'ল একাধিক বোতাম টিপলে আপনার মাউস অতিরিক্ত বাটন রিলিজ ইভেন্ট তৈরি করে। সেক্ষেত্রে আপনার বিকল্পগুলি হ'ল কী বাঁধাইয়ের কাজটি ব্যবহার করা বা xf86-input-evdevঅযাচিত ইভেন্টগুলি ফিল্টার করতে লাইব্রেরি সংশোধন করা (বা নিখোঁজদের অনুকরণ করা)। কিছুক্ষণ আগে আমি টাচস্ক্রিনের জন্য এমন কিছু করেছি যা টেনে আনার এবং ছাড়ার চেষ্টা করার সময় ইভেন্টগুলিতে "ক্লিক" তৈরি করে। ধারণা ছিল "মুক্তি" ইভেন্টগুলি ফিল্টার করা যা প্রায় এক সাথে (একটি ছোট সময়ের উইন্ডোর মধ্যে) "ক্লিক" ইভেন্টগুলির সাথে ঘটেছিল। যদি আমার অনুমান সঠিক হয় তবে আপনাকে অবশ্যই অনুরূপ কিছু বাস্তবায়ন করতে হবে।


1

আমি অন্যান্য মডিফায়ার কী দিয়ে আজ আগে এটি আবিষ্কার করেছি। সমস্যাটি হ'ল মুক্তির জন্য আপনাকে অবশ্যই বোতামের সংমিশ্রণে সংশোধকটি অন্তর্ভুক্ত করতে হবে। ধরে নিলাম আপনার সুপার কীটি Mod4 এ ম্যাপ করা হয়েছে (যা পূর্বনির্ধারিত হওয়া উচিত)

"xte 'keydown Super_L'"
  b:11

"xte 'keyup Super_L'"
  Mod4 + b:11 + release

সম্পাদনা: ঠিক বুঝতে পেরেছি যে এটি আপনার প্রশ্নের পুরোপুরি উত্তর দেয় না কারণ আপনি বি: ১১ টি ধরে থাকার পরেও এলএমবি ব্যবহার করতে পারবেন না

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