input, fb, vt, sysfs: the kernel calls Xorg makes
Xorg on a framebuffer -- the fbdev video driver, the evdev input driver, libpciaccess -- asks the kernel a fixed set of questions before it draws anything, and gives up on the first wrong answer. These are those answers. evdev: EVIOCGVERSION, GID, GNAME, GPHYS, GUNIQ, GPROP, GBIT, GKEY, GABS, GREP and the accepted setters. Xorg and libinput decide what a device *is* from the capability bitmaps; /dev/input/eventN answered only EVIOCGRAB, which reads as no device at all. Each device's bitmaps are its defaults plus whatever it has reported, so a USB tablet makes the pointer absolute. fbdev: FBIOPUT_VSCREENINFO succeeds for the mode already set, as on Linux -- the fbdev driver sets it every time it starts -- and still refuses any other. FBIOPAN_DISPLAY to the origin; FBIOBLANK. The console: KDSETMODE(KD_GRAPHICS) stops it drawing on a terminal, KDSKBMODE(K_OFF) stops keys reaching its tty, and VT_PROCESS now does the switch handshake: leaving the terminal sends relsig and waits for VT_RELDISP, arriving sends acqsig. A terminal whose owner has died goes back to the kernel whole, so a crashed X cannot leave the console dead. /sys: boot_vga, a writable enable, and graphics/fb0 under the display device, which is how the fbdev driver pairs a card with /dev/fb0. ports/linux-headers: <linux/*.h> into musl's prefix, from sabotage- linux's kernel-headers 4.19.88-2. Its checksum is recorded from the first download; upstream publishes none. cmd/xready makes each call and checks the answer, including the switch handshake on tty2 and an owner that dies holding it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
This commit is contained in:
parent
132a2981b1
commit
b1323e193a
14 changed files with 860 additions and 32 deletions
|
|
@ -145,8 +145,34 @@ struct rlimit {
|
|||
#define VT_GETMODE 0x5601
|
||||
#define VT_SETMODE 0x5602
|
||||
#define VT_GETSTATE 0x5603 // struct vt_stat
|
||||
#define VT_RELDISP 0x5605 // by value: 1 release, 0 refuse, VT_ACKACQ
|
||||
#define VT_ACTIVATE 0x5606
|
||||
#define VT_WAITACTIVE 0x5607
|
||||
#define VT_DISALLOCATE 0x5608
|
||||
|
||||
// The console's keyboard and display modes, which a display server sets on
|
||||
// the terminal it takes: KD_GRAPHICS so the console stops drawing on it, and
|
||||
// K_OFF so keys stop reaching its tty -- the server reads them from
|
||||
// /dev/input instead. Linux's numbers.
|
||||
#define KIOCSOUND 0x4B2F
|
||||
#define KDMKTONE 0x4B30
|
||||
#define KDGETLED 0x4B31
|
||||
#define KDSETLED 0x4B32
|
||||
#define KDGKBTYPE 0x4B33
|
||||
#define KDSETMODE 0x4B3A
|
||||
#define KDGETMODE 0x4B3B
|
||||
#define KDGKBMODE 0x4B44
|
||||
#define KDSKBMODE 0x4B45
|
||||
#define KDGKBLED 0x4B64
|
||||
#define KDSKBLED 0x4B65
|
||||
#define KD_TEXT 0x00
|
||||
#define KD_GRAPHICS 0x01
|
||||
#define K_RAW 0x00
|
||||
#define K_XLATE 0x01
|
||||
#define K_MEDIUMRAW 0x02
|
||||
#define K_UNICODE 0x03
|
||||
#define K_OFF 0x04
|
||||
#define KB_101 0x02
|
||||
|
||||
// VT_SETMODE modes. VT_AUTO is the kernel switching on its own; VT_PROCESS
|
||||
// means a program has taken switching over and the kernel must keep its hands
|
||||
|
|
@ -200,8 +226,8 @@ struct vt_chord {
|
|||
struct vt_mode {
|
||||
char mode; // VT_AUTO or VT_PROCESS
|
||||
char waitv; // unused here
|
||||
short relsig; // signal on release -- not delivered yet
|
||||
short acqsig; // signal on acquire -- not delivered yet
|
||||
short relsig; // signal on release; see vt_switch()
|
||||
short acqsig; // signal on acquire
|
||||
short frsig; // unused
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue