ปุ่ม Fn ทำงานอย่างไร


26

ฉันชอบที่จะรู้ว่าFnแป้นทำงานอย่างไรในแล็ปท็อปของฉัน ฉันคิดว่ามีโมดูลเคอร์เนลที่จับFnคีย์และเรียกสคริปต์บางอย่างเพื่อทำอะไรบางอย่าง ในแล็ปท็อปของฉันFn+ F2เปลี่ยนพลังงานไร้สายและบลูฟัน

นี่คือผลลัพธ์ของacpi_listenเมื่อฉันกดFn+F2

hotkey ATKD 0000005d 00000019
hotkey ATKD 0000007e 00000009

และ folloing นั้นเป็นผลลัพธ์ของ xevสำหรับFn+F2

keycode 238 press
keycode 238 release
keycode 237 press
keycode 237 release

ฉันเดาว่าทุกครั้งที่ฉันกด Fn + F2สองเหตุการณ์จะถูกกระโดดออกไป ฉันพยายามค้นหาการกระทำที่ดำเนินการสำหรับปุ่มนี้ ความคิดใด ๆ ชื่นชม;)

คำตอบ:


26

Synetechให้คำอธิบายที่อ่านง่ายมากเกี่ยวกับFnกุญแจที่นี่

รายละเอียดทางเทคนิค

เมื่อคุณกดปุ่มบนแป้นพิมพ์ตัวควบคุมแป้นพิมพ์ (ขนาดเล็ก ชิป IC ภายในแป้นพิมพ์) ตรวจพบวงจรไฟฟ้าและประมวลผลเพื่อถอดรหัสคีย์ถูกกดแล้วส่ง scancodeกับเมนบอร์ด ระบบปฏิบัติการรับ scancode จากBIOSจากนั้นดำเนินการสิ่งที่จำเป็นเพื่อประมวลผลการกดปุ่มนั้น

ด้วยปุ่มส่วนใหญ่มันง่ายพอ หากคุณกดปุ่มA ตัวควบคุมแป้นพิมพ์จะส่ง scancode ไปยังแผงวงจรหลักซึ่งจะส่งผ่านไปยังระบบปฏิบัติการซึ่งโดยปกติแล้วจะพิมพ์ 'A' (หากระบบปฏิบัติการตรวจพบว่าหนึ่งในคีย์ตัวปรับแต่งค้างไว้ในขณะนั้นอาจทำสิ่งที่แตกต่างกันในความเป็นจริงคุณสามารถกำหนดค่าให้ทำสิ่งที่คุณต้องการเมื่อAกดปุ่มมีหรือไม่มีตัวดัดแปลง)

ตอนนี้ที่Fnสำคัญคือพิเศษ เมื่อคุณกดด้วยตัวเองจะไม่มีสิ่งใดเกิดขึ้นเพราะมันเป็นเพียงคีย์ตัวปรับแต่งเท่านั้นและไม่ใช่ (โดยทั่วไป) หมายถึงการทำอะไรด้วยตัวเอง เมื่อคุณกดค้างไว้แล้วกดแป้นอื่นตัวควบคุมแป้นพิมพ์จะตรวจจับสิ่งนั้นและดูในตารางในตัวเพื่อดูว่าเป็นชุดค่าผสมที่รู้จักหรือไม่ หากคอมโบนั้นไม่ได้อยู่ในตารางก็จะไม่สนใจมัน แต่ถ้าคอมโบนั้นอยู่ในตารางมันจะทำการค้นหา scancode ที่เกี่ยวข้องแล้วส่งมันออกมา

ระบบปฏิบัติการท้ายสุดเห็นอะไร? มันไม่เห็น scancode สำหรับFnคีย์และ scancode สำหรับคีย์อื่น ๆ แต่จะเห็นเพียง scancode เดียวที่เกี่ยวข้องกับฟังก์ชันใด ๆ ที่ Fn-combo ตั้งไว้ ตัวอย่างเช่นหากผู้ผลิตแล็ปท็อปได้ตั้งค่า Fn+ Down Arrowคำสั่งผสมเพื่อลดระดับเสียงระบบปฏิบัติการจะเห็น scancode ที่เกี่ยวข้องกับVolume Downแป้นพิมพ์ซึ่งแป้นพิมพ์บางตัวมีจริง

โปรดทราบว่าFnรหัสนี้ทำงานอย่างอิสระจากระบบปฏิบัติการ

นอกจากนี้บทความนี้อาจช่วยชี้แนะคุณในทิศทางที่ถูกต้อง:

เคอร์เนลมีของตัวเองscancodeที่จะ keycodeตาราง mapping จึงแม scancode บางอย่างที่จะรหัสใน คุณสามารถมองเข้าไปใน /usr/include/linux/input.h เพื่อดูสิ่งที่ใช้เคอร์เนลของคุณสำหรับ scancode เพื่อทำแผนที่ keycode - keymapมันถูกเรียกว่า


ป.ล.

ฉันอาจต้องล้างแค้นในการอ้างสิทธิ์ก่อนหน้านี้ว่าFnปุ่มทำงานอย่างเป็นอิสระจากระบบปฏิบัติการทั้งหมด โดยไม่ต้องลงรายละเอียดทางเทคนิคเพิ่มเติมที่นี่ผลที่สุดน่าจะเป็นที่ระบบปฏิบัติการของคุณอาจไม่ "สนับสนุน" Fnคีย์ของแป้นพิมพ์ทั้งหมดหรือบางส่วนของคุณดูตัวอย่างเช่น:


1
ขอบคุณข้อมูลที่น่าสนใจเกี่ยวกับปุ่ม Fn ที่จริงแล้วฉันต้องการค้นหาว่าส่วนใดของระบบปฏิบัติการที่scancodeเกี่ยวข้องกับตัวอย่างเช่น "keycode 238"
soroosh

3
บางทีบทความนี้อาจช่วยชี้แนะคุณในทิศทางที่ถูกต้อง? "เคอร์เนลมีของตัวเองscancodeที่จะkeycodeตาราง mapping จึงแม scancode บางอย่างที่จะ keycode คุณสามารถมองเข้าไปใน /usr/include/linux/input.h เพื่อดูสิ่งที่ใช้เคอร์เนลของคุณสำหรับ scancode เพื่อทำแผนที่ keycode -. จะเรียกว่าkeymap."
บ๊องเกี่ยวกับ natty

1
บทความนั้นสมบูรณ์แบบนี่คือสิ่งที่ฉันกำลังมองหา
soroosh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.