Ctrl + Alt + F <Num> চাপলে কী ঘটে?


38

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

সম্পাদনা: আমি বুঝতে চাই যে এটি গ্রাফিকাল (এক্স 11) এবং পাঠ্য-ভিত্তিক পরিবেশ উভয় ক্ষেত্রে কীভাবে কাজ করে।


1
পরিষ্কার করার জন্য, আপনি কি এক্স 11 এ (এটি একটি গ্রাফিকাল সেশন) বা পাঠ্য কনসোলে থাকাকালীন এই কীগুলি টিপছেন? উত্তরটি আলাদা।
ডারোবার্ট

উত্তর:


36

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

কার্নেলের মধ্যে একটি কীম্যাপ বিল্ড রয়েছে; সাথে চলার সময় এটি সংশোধন করা যায় এবং এর সাথে loadkeysদেখা হয় dumpkeys:

[...]
keycode  59 = F1               F13              Console_13       F25             
        alt     keycode  59 = Console_1       
        control alt     keycode  59 = Console_1       
keycode  60 = F2               F14              Console_14       F26             
        alt     keycode  60 = Console_2       
        control alt     keycode  60 = Console_2       
keycode  61 = F3               F15              Console_15       F27             
        alt     keycode  61 = Console_3       
        control alt     keycode  61 = Console_3
[...]   

কার্নেলের উত্সটিতে একটি ডিফল্ট কীম্যাপ ফাইল রয়েছে যা দেখতে একেবারে হ'ল; 3.12.2 এর জন্য এটি src/drivers/tty/vt/defkeymap.map। আপনি দেখতে পাবেন যে এখানে একটি সম্পর্কিত ডিফিকেম্যাপ.c ফাইল রয়েছে (এটি দিয়ে উত্পন্ন করা যেতে পারে loadkeys --mktable)। হ্যান্ডলিংটি রয়েছে keyboard.c(এই সমস্ত ফাইল একই ডিরেক্টরিতে রয়েছে) যা set_console()থেকেvt.c কল আসে :

» grep set_console *.c
keyboard.c:     set_console(last_console);
keyboard.c:     set_console(i);
keyboard.c:     set_console(i);
keyboard.c:     set_console(value);
vt.c:int set_console(int nr)
vt_ioctl.c:                     set_console(arg);

আমি সেই তালিকা থেকে কিছু হিট সম্পাদনা করেছি; আপনি দ্বিতীয় শেষ লাইনে ফাংশন স্বাক্ষর দেখতে পারেন।

তাই এইগুলি স্যুইচিংয়ের সাথে জড়িত। আপনি কল ক্রম তাকান, অবশেষে তোমার কাছে ফিরে আসা kbd_event()মধ্যে keyboard.c। এটি মডিউলটির ইভেন্ট হ্যান্ডলার হিসাবে নিবন্ধিত হয়েছে:

(3.12.2 drivers/tty/vt/keyboard.cলাইন 1473)

MODULE_DEVICE_TABLE(input, kbd_ids);

static struct input_handler kbd_handler = {
    .event      = kbd_event,   <--- function pointer HERE
    .match      = kbd_match,
    .connect    = kbd_connect,
    .disconnect = kbd_disconnect,
    .start      = kbd_start,
    .name       = "kbd",
    .id_table   = kbd_ids,
};  

int __init kbd_init(void)
{

[...]

    error = input_register_handler(&kbd_handler);           

সুতরাং, kbd_event()যখন সত্যিকারের হার্ডওয়্যার ড্রাইভারের কাছ থেকে কোনও কিছু বুদবুদ হয় (সম্ভবত কিছু থেকে drivers/hid/বা drivers/input/)) তবে এটি kbd_eventকোনও ফাংশন পয়েন্টারের মাধ্যমে নিবন্ধিত হওয়ার কারণে আপনি এটি ফাইলের বাইরে উল্লেখ করা দেখতে পাবেন না ।

কার্নেল যাচাই করার জন্য কিছু সংস্থান রয়েছে

  • লিনাক্স ক্রস রেফারেন্স আইডেন্টিফাইয়ার অনুসন্ধান একটি দুর্দান্ত টুল।
  • ইন্টারেক্টিভ লিনাক্স কার্নেল ম্যাপ ক্রস রেফারেন্স সরঞ্জামে একটি আকর্ষণীয় গ্রাফিকাল সামনে শেষ হয়।
  • বিশাল লিনাক্স কার্নেল মেইলিং লিস্টের (এলকেএমএল) কয়েকটি historicalতিহাসিক সংরক্ষণাগার রয়েছে, যা কমপক্ষে 1995-এ ফিরে যায়; তাদের মধ্যে কিছু রক্ষণাবেক্ষণ করা হয় না এবং সার্চ বৈশিষ্ট্য ভেঙ্গে গেছে, কিন্তু gmane এক খুব ভাল কাজ মনে হয়। লোকেরা মেল তালিকায় প্রচুর প্রশ্ন করেছে এবং এটি বিকাশকারীদের মধ্যে যোগাযোগের একটি প্রাথমিক মাধ্যম।
  • আপনি printkট্রেসিংয়ের সহজ মাধ্যম হিসাবে উত্সটিতে আপনার নিজস্ব লাইনগুলি ইনজেকশন করতে পারেন (স্ট্যান্ডিও থেকে প্রিন্টফের সাহায্যে কার্নেল কোডে সমস্ত স্ট্যান্ডার্ড সি লিব ব্যবহার করা যায় না)। প্রিন্টক স্টাফগুলি সিসলগে শেষ হয়।

ওল্ফগ্যাং মাউয়েরার ২. ker কার্নেল, প্রফেশনাল লিনাক্স কার্নেল আর্কিটেকচারের উপর একটি দুর্দান্ত বই লিখেছিলেন , যা উত্সের মধ্য দিয়ে যায়। গ্রেগ ক্রোয়াহ-হার্টম্যান , গত এক দশক ধরে অন্যতম মূলনীতি, এর মধ্যে অনেক কিছুই লাথি মারছে।


1
ধন্যবাদ, আমি ঠিক এটিই খুঁজছিলাম শৃঙ্খলে আগে কী ঘটেছিল সে সম্পর্কে আপনি বিস্তারিত বলতে পারেন? আমরা যখন Ctrl + Alt + F1 টিপবো তখন কী-বোর্ড কোডের কোডটি কীভাবে কল হয়? কীবোর্ড.আর আসল "কীবোর্ড ড্রাইভার" নয়, তাই না?
ব্যবহারকারী31765

1
না, আমি এটা মনে করি না। এটি টিটিআই ড্রাইভারের সমস্ত অংশ, যার জন্য keyboard.cইভেন্ট হ্যান্ডলার হবে; "কীবোর্ড ড্রাইভার" নিজেই নিম্ন স্তরের হবে - drivers/input/keyboard/নন-ইউএসবি স্টাফের জন্য তাদের মধ্যে অনেকগুলি গুচ্ছ রয়েছে । ইউএসবি স্টাফগুলি প্রমিত করা হয়েছে সুতরাং সেখানে কেবল একটি থাকবে (সম্ভবত জড়িত drivers/hid/usbhid/usbkbd.c)। আমি অনুমান করছি যে কীবোর্ড ড্রাইভারটি এমন একটি স্ক্যানকোড তৈরি করার জন্য যা ভিটি / কীবোর্ড.কে দেওয়া যেতে পারে (এর শীর্ষের নিকটে getkeycode () দেখুন)। Documentation/input/input.txtকিছু (আশ্চর্যজনক প্রাচীন, লোল) ইঙ্গিত আছে।
স্বর্ণলোকস

গীত। অনেকগুলি কার্নেল দেবগণ লিনাক্স কার্নেল মেল তালিকায় রয়েছে (এলকেএমএল) যা জনসাধারণের জন্য উন্মুক্ত, এবং আপনি যদি আপনার পি ও কিউস ইত্যাদি ( tux.org/lkML ) মনে করেন তবে এটি সেখানে অনুসন্ধান করার উপযুক্ত হবে ... কেবলমাত্র নিশ্চিত হয়ে নিন আপনি এখনই এটির জন্য একটি ফোল্ডার স্থাপন করুন, এতে প্রচুর মেল জড়িত।
স্বর্ণলোকস

কোডটি আরও নিবিড়ভাবে পরিদর্শন করার পরে, কি-বোর্ড.-তে কেবল তিনটি অপ্রচলিত ফাংশন রয়েছে যা সেট_কনসোল কল করে: fn_lastcons (), fn_dec_console (), এবং fn_inc_console ()। একটি সর্বশেষ কনসোলে যাওয়ার জন্য এবং একটি ডান বা বামে যাওয়ার জন্য। সুতরাং আমি এখনও বুঝতে পারি না যে আমরা যখন Ctrl + Alt + F <num> চাপ দিই তখন সেট_কনসোল () কীভাবে কল হয়। আমি ধরে নিলাম আমাদের কোথাও কোথাও সেট_কনসোল () পরামিতি হিসাবে <num> পাস করতে হবে। আমি দেখতে পাচ্ছি যে সেট_কনসোল () ফসলগুলিও ভিটি_আইওকটিএল.সি.তে রয়েছে, তবে এটি কেবল আইওএসটিএল ব্যবহারকারীর স্থান থেকে নয়, যেমন chvt থেকে? এখনও আমার বোঝার কিছু ছিদ্র আছে।
ব্যবহারকারী31765

1
ড্রাইভার / লুকানোর ক্ষেত্রে আরও সম্ভাব্য সম্পর্কিত স্টাফ রয়েছে। এছাড়াও ভিটিসি তে 'কনসোল_ক্যালব্যাক ()' লক্ষ্য করুন, যা স্যুইচটি করতে পারে এবং DECLARE_WORK এর মাধ্যমে শীর্ষে নিবন্ধভুক্ত। এটি শিডিয়ুলারের সাথে সম্পর্কিত: lxr.free-electrons.com/ident?i=DECLARE_WORK (যে ক্রস-রেফারেন্স সরঞ্জামটি Makelinux.net/kernel_map থেকে খাওয়ানো যেতে পারে যা আপনি আকর্ষণীয় দেখতে পারেন); আমি ধরে নেব যে ভিটিটির জন্য সেই ফাংশনটিকে "মূল লুপ" তৈরি করে। স্পষ্টতই এখানে অনুপস্থিত লিঙ্কটি হ'ল ঠিক কীভাবে কীবোর্ড ইভেন্টগুলি প্রায় পাস হয়।
সোনারলোকস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.