ฉันพยายามบังคับให้ capslock นำไปสู่ ไม่ทำงานสำหรับฉันดังนั้นฉันพยายามที่จะใช้xset
setleds
ในคอนโซลกราฟิกคำสั่งนี้จะส่งคืน:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
ในเทอร์มินัลเสมือนใช้งานได้ แต่เอฟเฟกต์นั้นเป็นโลคัลสำหรับเทอร์มินัลเสมือนนั้น จากสิ่งที่ฉันเข้าใจทำงาน
> setleds -L +caps < /dev/tty1
จากเทอร์มินัลเสมือน (เซิร์ฟเวอร์ X ของฉันกำลังนั่งอยู่บน tty1) ควรใช้งานได้ อย่างไรก็ตามต้องมีการเข้าถึงรูท
มีวิธีการส่งคำสั่งไปยังคอนโซลที่อยู่ภายใต้เซิร์ฟเวอร์ X ไม่ว่าจะเป็นจาก xserver ดังกล่าวหรือจาก VT อื่นโดยไม่ต้องรูท?
แก้ไข: จากข้อเสนอแนะจาก Mark Plotnik และจากรหัสที่พบที่นี่ฉันเขียนและรวบรวมสิ่งต่อไปนี้:
#include <X11/Xlib.h>
#include <X11/XKBlib.h>
#define SCROLLLOCK 1
#define CAPSLOCK 2
#define NUMLOCK 16
void setLeds(int leds) {
Display *dpy = XOpenDisplay(0);
XKeyboardControl values;
values.led_mode = leds & SCROLLLOCK ? LedModeOn : LedModeOff;
values.led = 3;
XChangeKeyboardControl(dpy, KBLedMode, &values);
XkbLockModifiers(dpy, XkbUseCoreKbd, CAPSLOCK | NUMLOCK,
leds & (CAPSLOCK | NUMLOCK) );
XFlush(dpy);
XCloseDisplay(dpy);
}
int main() {
setLeds(CAPSLOCK);
return 0;
}
จากสิ่งที่ Gilles เขียนxset
ฉันไม่ได้คาดหวังให้มันทำงาน แต่มัน ... ในบางแง่: มันเป็นผู้นำ แต่มันก็ตั้งสถานะของการล็อค ฉันไม่เข้าใจรหัสทั้งหมดข้างต้นอย่างสมบูรณ์ดังนั้นฉันอาจทำผิดพลาดไป เห็นได้ชัดว่าสายXChangeKeyboardControl...
ไม่เปลี่ยนแปลงพฤติกรรมของโปรแกรมและXkbLockModifiers
เป็นสิ่งที่กำหนดสถานะของ led และสถานะ capslock
xterm
ต้นทางและใช้การเรียกXChangeKeyboardControl ()เพื่อตั้งค่าหรือยกเลิกการติดตั้ง LED โดยไม่ส่งผลกระทบต่อสถานะของแคปล็อค ฯลฯ ดังนั้นหากคุณสามารถรวบรวมรหัส C นั่นเป็นวิธีหนึ่ง
xterm
ส่งผลกระทบต่อไฟled หรือไม่ ดูเหมือนความคิดที่ดีฉันจะแก้ไขคำถามด้วยผลลัพธ์ของฉัน
xterm
ต้องเปิดไฟ LED ScrollLock โดยส่งลำดับ escape ESC [3 q ตามไฟล์ctlseqs.txt
ที่มาพร้อมกับแหล่งที่มา แต่ไม่สามารถรับ Num หรือ CapsLock LEDs เพื่อให้สว่างขึ้นด้วยพารามิเตอร์ 1 และ 2 บางทีฉันต้อง ทำคอนฟิกูเรชัน XKB ที่กล่าวถึงในคำตอบ xterm
โทรXChangeKeyboardControl
เข้าxtermShowLED
และxtermClearLEDs
, แต่ไม่โทรไปXkbLockModifiers
ไหนเลย
xdotool key Caps_Lock
จากไคลเอนต์ X ที่ได้รับอนุญาตแม้ว่าจะเป็นการเปิดใช้ตัวพิมพ์ใหญ่ก็ตาม