বিভিন্ন কী-বোর্ড থেকে ইনপুট কীভাবে আলাদা করা যায়?


14

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

তবে, এই কীগুলি টিপলে, কেবলমাত্র তাদের নিয়মিত সংকেত (সংখ্যা, অপারেটর এবং প্রবেশকারী), পাইথনে প্রেরণ করা হবে এবং এটি মূল কীবোর্ড এবং বিশেষ কীবোর্ড থেকে সংকেতগুলির মধ্যে পার্থক্য করতে সক্ষম হবে না।

পাইথনের কাছে (যতদূর আমি খুঁজে পেলাম) এই পার্থক্য তৈরি করার কোনও পদ্ধতি নেই, আমি এটি ওএসে নিজেই করতে চাই। আমি এটি রাস্পবেরি পাই এর জন্য প্রোগ্রামিং করব, সুতরাং এটি লিনাক্স হবে।

সুতরাং, মূল প্রশ্ন: আমি কী কী কী কোডগুলি অন্য কী-কোডগুলিতে পুনরায় তৈরি করতে পারি। আমি এফ-কীগুলি ব্যবহার করার বিষয়ে ভেবেছিলাম যা আমি অন্যান্য উদ্দেশ্যে ব্যবহার করব না; বা কেবলমাত্র কিছু অক্ষর যা কোনও কীবোর্ডে উপস্থিত নেই (মনে করুন যে এরকম রয়েছে)।

লিনাক্স / ইউনিক্সে এটি কি সম্ভব? এবং যদি তা হয় তবে আমি কীভাবে এটি করতে পারি?


কী-বোর্ড কীভাবে সংযুক্ত হতে চলেছে? আপনি সরাসরি ডিভাইস থেকে পড়তে চাইতে পারেন। এটি আমার কাছে সবচেয়ে সুস্পষ্ট উপায়, যদিও আমি মনে করি এর থেকে আরও ভাল উপায় আছে।
TNW

আমি যুক্ত করেছি যে তারা ইউএসবি দ্বারা সংযুক্ত হবে। পাইথন ব্যবহার করে আমি কীভাবে সরাসরি ডিভাইস থেকে পড়তে পারি?
স্টিভেন রুজ

দেখে মনে হচ্ছে অ-গৃহীত উত্তরটি গৃহীত উত্তরটির চেয়ে অনেক সহজ।
নিকানা রেকলাভিকস

উত্তর:


12

আপনি যদি লিনাক্স ব্যবহার করছেন তবে ইনপুট ডিভাইসের মধ্যে পার্থক্য করার সর্বোত্তম উপায় হ'ল লিনাক্স ইভেন্ট ইন্টারফেস । কোনও ডিভাইসের হার্ডওয়্যার-নির্দিষ্ট ইনপুটটি ডিকোড করার পরে এটি একটি মধ্যবর্তী লিনাক্স-নির্দিষ্ট ইভেন্ট স্ট্রাকচারে রূপান্তরিত হয় এবং এর অধীনে এক বা একাধিক অক্ষর ডিভাইসগুলি পড়ে উপলব্ধ করা হয় /dev/input/। এটি আপনি যে প্রোগ্রামিং ভাষা ব্যবহার করেন তার থেকে সম্পূর্ণ স্বাধীন is

প্রতিটি হার্ডওয়্যার ডিভাইস তার নিজস্ব ডিভাইস পায় /dev/input/eventXএবং সমষ্টিগুলিও রয়েছে (যেমন /dev/input/miceসিস্টেমের সমস্ত ইঁদুরের গতি প্রতিনিধিত্ব করে)। আপনার সিস্টেমেও থাকতে পারে /dev/input/by-pathএবং /dev/input/by-id

একটা হচ্ছে ioctlনামক EVIOCGNAMEযা মনুষ্যোচিত-পাঠযোগ্য স্ট্রিং হিসেবে ডিভাইসের নাম ফেরৎ, অথবা আপনি ভালো কিছু ব্যবহার করতে পারেন /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse

আপনি ডিভাইসটি খুলুন এবং প্রতিবার ইনপুট হার্ডওয়্যার থেকে কোনও ইভেন্ট এলে আপনি একটি প্যাকেট ডেটা পাবেন। আপনি যদি সি পড়তে পারেন তবে আপনি ফাইলটি অধ্যয়ন করতে পারেন /usr/include/linux/input.hযা দেখায় যে এই জিনিসগুলি ঠিক কীভাবে কাজ করে। আপনি যদি না করেন তবে আপনি এই প্রশ্নটি পড়তে পারেন যা আপনার প্রয়োজনীয় সমস্ত তথ্য সরবরাহ করে।

ইভেন্ট ইন্টারফেসের ভাল জিনিসটি হ'ল আপনার কী ডিভাইসের প্রয়োজন তা সন্ধান করে এবং অন্য সকলকে উপেক্ষা করে আপনি কেবল সেই ইনপুট ডিভাইস থেকে ইনপুট পড়তে পারেন । আপনি কীগুলি, বোতামগুলি এবং নিয়ন্ত্রণগুলি সম্পর্কে সাধারণত বিজ্ঞপ্তিগুলি পাবেন যা কেবলমাত্র টার্মিনাল থেকে 'রান্না করা' অক্ষর প্রবাহ: এমনকি মৃত কীগুলি Shiftইত্যাদির দ্বারা পড়ে না would

খারাপ জিনিসটি হ'ল ইভেন্ট ইন্টারফেসটি 'রান্না করা' অক্ষরগুলি ফিরিয়ে দেয় না, এটি কীগুলির জন্য কেবল সংখ্যার কোডগুলি ব্যবহার করে (প্রতিটি কীগুলির সাথে সম্পর্কিত কোডগুলি পূর্বোক্ত শিরোনাম ফাইলটিতে পাওয়া যায় - তবে ইভেন্ট.পিপির পাইথন উত্সেও । আপনার ইনপুট ডিভাইসে যদি অস্বাভাবিক কী / বোতাম থাকে তবে সঠিক সংখ্যা না পাওয়া পর্যন্ত আপনাকে কিছুটা পরীক্ষা করতে হবে।


2

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

এটি এখানে রূপরেখা দেওয়া হয়েছে: /superuser/760602/how-to-remap-keys-und-linux-for-a-specific-keyboard-only । মূল পয়েন্টটি হ'ল setxkbmapএকটি ডিভাইস আর্গুমেন্ট নেয়।

আপনি যদি কাঁচা ইনপুট পদ্ধতির ব্যবহার করে থাকেন তবে লিনসপুট আপনার জন্য আপনার কাঁচা ডিভাইসটি আবিষ্কার করবে।

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