মাউস বোতাম টিপছে কিনা তা সনাক্ত করুন, তারপরে স্ক্রিপ্ট বা কমান্ডটি চাওয়া হবে


11

বাশ থেকে মাউস বোতামের রাজ্য পাওয়ার কোনও উপায় আছে কি? এক্সডটুল কেবল মাউসের অবস্থান পেতে পারে।

আমি এমন কিছু সেট আপ করতে চাই যেখানে আমি কোনও নিয়ম সংজ্ঞায়িত করতে পারি যেখানে যখন মাউস বোতাম টিপানো হয়, একটি স্ক্রিপ্ট কার্যকর করা যায়।


আপনি অবশ্যই মাউস ইভেন্টগুলি সনাক্ত করতে পারেন , তবে আমি বিশ্বাস করি না যে এই মুহুর্তে মাউস বোতামটি টিপছে কিনা তা সিস্টেমকে জিজ্ঞাসা করার উপায় আছে । প্রতিটি মাউস ক্রিয়াকলাপের পার্সারের জন্য আমি ঘড়িগুলি দেখেছি, যদি আপনি সিউডোকোড MouseButton1Downএবং MouseButton1Upঘটনাগুলি ক্ষমা করে দেন।
ডোপঘোটি

আমার কিছু স্ক্রিপ্ট দরকার যা মাউসটি দেখবে এবং বাম বোতামটি টিপলে এটি কিছু করবে।
মার্টিনপি

স্পষ্টতা দরকার। আপনি যখন শেলটিতে আছেন তখন আপনি কি এমন কিছু চান যা আপনি টার্মিনাল উইন্ডোতে ক্লিক করেন, সেই নির্দিষ্ট শেলটি কিছু করে? বা আপনি কি এটি চান যাতে আপনি যখনই কোনও নির্দিষ্ট মাউস বোতামটি ক্লিক করেন যেখানেই স্ক্রিপ্টটি চালিত হয় (এবং আপনার কোনও টার্মিনালে স্ক্রিপ্টটি দেখার দরকার নেই)?
প্যাট্রিক

আমার স্ক্রিপ্ট দরকার, যা আমি চালাব এবং তারপরে এটি ডেস্কটপে যে কোনও জায়গায় মাউস বোতামগুলির জন্য নজর রাখবে। এটি মাউসকে ব্লক করবে না, এটি কেবল এটি শুনবে। আমি Xlib এর সাথে সি-তে এর জন্য প্রোগ্রাম লেখার চেষ্টা করেছি, তবে এটিতে কেবল এক্সগ্র্যাববাটন এবং এক্সগ্র্যাবপয়েন্টার রয়েছে এবং আমি চাই না, কারণ এটি পয়েন্টারটি ধরে এবং অন্য উইন্ডোজ ক্লিক ইভেন্টগুলি নিবন্ধ করে না।
মার্টিনপি

উত্তর:


11
xinput --query-state <mouse_id>

এটি আপনাকে সমস্ত মাউস বোতামের জন্য একটি রাজ্য দেয় যা দেখতে দেখতে এটি:

2 classes :
ButtonClass
    button[1]=up
    button[2]=up
    button[3]=up
    button[4]=up
    button[5]=up
    button[6]=up
    button[7]=up
    button[8]=up
    button[9]=up
    button[10]=up
    button[11]=up
    button[12]=up
    button[13]=up
    button[14]=up
    button[15]=up
    button[16]=up
ValuatorClass Mode=Relative Proximity=In
    valuator[0]=313
    valuator[1]=667
    valuator[2]=-20

মাউস_আইডি থেকে প্রাপ্ত করা যেতে পারে:

xinput --list

এখানে একটি ছোট মাউস বোতাম প্রহরী স্ক্রিপ্ট:

#!/bin/bash

MOUSE_ID=$(xinput --list | grep -i -m 1 'mouse' | grep -o 'id=[0-9]\+' | grep -o '[0-9]\+')

STATE1=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
while true; do
    sleep 0.2
    STATE2=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
    comm -13 <(echo "$STATE1") <(echo "$STATE2")
    STATE1=$STATE2
done

আপনার MOUSE_ID সনাক্তকরণ স্ট্রিং ('মাউস') অন্য কোনও কিছুতে পরিবর্তন করতে হবে।


xinput --listআমাকে দেয় X Input extension not available.। : এই বিষয়টি জন্য দুঃখজনকভাবে গুগল যা কিছু আমার ক্ষেত্রে সহায়ক ভাগাভাগি করে না Xvnc4একটি ন্যূনতম ডেবিয়ান VM- র হবে। সম্ভবত আমি ভাগ্যের বাইরে আছি
টিনো

6

xevএক্স পরিবেশের মধ্যে আপনার মাউসের বোতামগুলির অবস্থা জানতে আপনি কমান্ড লাইন সরঞ্জামটি ব্যবহার করতে পারেন ।

উদাহরণ

$ xev
...
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
    root 0x86, subw 0x0, time 319064320, (164,14), root:(166,101),
    state 0x0, button 1, same_screen YES

ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
    root 0x86, subw 0x0, time 319064439, (164,14), root:(166,101),
    state 0x100, button 1, same_screen YES

ButtonPress event, serial 36, synthetic NO, window 0x3800001,
    root 0x86, subw 0x0, time 319065208, (164,14), root:(166,101),
    state 0x0, button 1, same_screen YES

ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
    root 0x86, subw 0x0, time 319065337, (164,14), root:(166,101),
    state 0x100, button 1, same_screen YES

ButtonPress event, serial 36, synthetic NO, window 0x3800001,
    root 0x86, subw 0x0, time 319066059, (164,14), root:(166,101),
    state 0x0, button 1, same_screen YES

তবে এই তথ্যটি আপনাকে আংশিক সমাধানে নিয়ে আসে। উপরে থেকে আপনি কী কী তথ্যটি বের করতে চান তা হ'ল কোন নম্বরটি আপনার মাউসের একটি নির্দিষ্ট বোতামের সাথে সম্পর্কিত। আমার উদাহরণে আমি বাম বোতাম টিপছি, "বাটন 1"।

xbindkeys

আপনি একটি বোতাম টিপে যাওয়ার সাথে সম্পর্কিত এমন একটি ক্রিয়া সেটআপ করতে এই সরঞ্জামটি ব্যবহার করতে পারেন। আপনি এমন একটি নিয়মও সেটআপ করতে পারেন যার জন্য কী প্রেস বা এমন কি + বোতামের সাথে একসাথে চাপা প্রয়োজন।

উদাহরণ

আপনাকে প্রথমে প্যাকেজগুলি xbindkeys ইনস্টল করা আছে তা নিশ্চিত করতে হবে।

তারপরে একটি টেমপ্লেট xbindkeys কনফিগারেশন ফাইল তৈরি করতে আপনাকে কেবল একবারে নিম্নলিখিত কমান্ডটি চালাতে হবে।

$ xbindkeys --defaults > /home/saml/.xbindkeysrc

তৈরি করা ফাইলের সাহায্যে আপনি এটি কোনও পাঠ্য সম্পাদককে খুলতে এবং এই জাতীয় নিয়ম যুক্ত করতে পারেন:

"xterm"
  b:3

এই নিয়মে বলা হয়েছে যে xterm3 বাটনটি টিপলে আমরা প্রোগ্রামটি চালাতে চাই । "বোতাম 3" হ'ল আমার ডান মাউস বোতাম।

উপরোক্ত পরিবর্তনটি করে আমাদের xbindkeys এটি ইতিমধ্যে চালু থাকলে মেরে ফেলতে হবে এবং তারপরে এটি পুনরায় চালু করতে হবে।

$ killall xbindkeys
$ xbindkeys

এখন এই চলমান যে কোনও সময় আমি মাউসের ডান বোতামে ক্লিক করলে একটি xtermকার্যকর হবে uted

তথ্যসূত্র


2
তবে এটি কেবল তৈরি উইন্ডোর জন্য কাজ করে। আমি কীভাবে বিশ্বব্যাপী সেই ইভেন্টটি ধরতে পারি?
মার্টিনপি

4

আপনি যদি কেবল মাউস ক্লিক (বা চাকা ইভেন্ট) এর xterm এ বাশ কমান্ড চালাতে চান তবে আপনি এই উদাহরণটি দেখতে পারেন:

$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done

এটি হুইল ইভেন্টের জন্য (পরিবর্তে 12 সেট ক্লিক করুন)


দয়া করে, আপনি কি ব্যাখ্যা করতে পারেন?
lucaswxp

2

আপনার কেক বোতাম টিপতে ইভেন্টটি না খেয়ে থাকতে পারে না। যদি আপনি চান যে আপনার স্ক্রিপ্টটি মাউস ইভেন্টটি গ্রহণ করে, তবে মাউস ইভেন্টটি অন্য কোনও অ্যাপ্লিকেশনের পরিবর্তে আপনার স্ক্রিপ্টে প্রেরণ করা হবে - এর অর্থ আপনার স্ক্রিপ্টটি মাউস ইভেন্টটি গ্রহন করতে হবে। যদি আপনার স্ক্রিপ্ট ইভেন্টটির দাবি না করে তবে যে উইন্ডোটি পাওয়া উচিত তা এটি পেয়ে যায়।

যদি আপনি চান তবে আপনি মাউস ইভেন্টটি ফোকাস উইন্ডো বা উইন্ডোতে প্রদত্ত স্থানাঙ্কগুলিতে ( xdotool click) এ পুনরায় পাঠাতে পারেন ।

আপনি নির্দিষ্ট মাউস বা কীবোর্ড ইভেন্টগুলিতে স্ক্রিপ্ট সম্পাদন করতে XBindKeys ব্যবহার করতে পারেন ।

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