Arch manual pages

IOCTL_CONSOLE(2) Linux-Programmierhandbuch IOCTL_CONSOLE(2)

ioctl_console - Ioctls für Console-Terminals und virtuelle Konsolen

Die folgenden, Linux-spezifischen ioctl(2)-Anfragen werden für Console-Terminals und virtuelle Konsolen unterstützt. Alle benötigen ein drittes Argument, das hier als argp angenommen wird.
KDGETLED
Ermittelt den Zustand der LEDs. argp zeigt auf ein char. Die unteren drei Bits von *argp werden wie folgt auf den Zustand der LEDs gesetzt:
LED_CAP 0x04 Feststelltaste-LED
LED_NUM 0x02 Num-LED
LED_SCR 0x01 Rollen-LED
KDSETLED
Setzt die LEDs. Die LEDs werden so gesetzt, dass sie den niedrigeren drei Bits des vorzeichenlosen long integer argp entsprechen. Falls allerdings ein »higher order«-Bit gesetzt ist, kehren die LEDs zum Normalzustand zurück: Anzeige des Status der Tastaturfunktionen »Feststellen«, »Num« und »Rollen«.

Vor Linux 1.1.54 gaben die LEDs lediglich den Zustand der entsprechenden Tastaturschalter wieder und KDGETLED/KDSETLED würde auch die Tastaturschalter ändern. Seit Linux 1.1.54 können mit den LEDs beliebige Informationen dargestellt werden, aber standardmäßig zeigen sie die Tastaturschalter an. Die folgenden zwei Ioctls werden zum Zugriff auf die Tastaturschalter verwandt:

KDGKBLED
Ermittelt die Tastaturschalter CapsLock, NumLock, ScrollLock (nicht Lichter). argp zeigt auf ein Char, der auf den Schalterzustand gesetzt ist. Die niedrigrangigen drei Bits (Maske 0x7) erhalten den aktuellen Schalterzustand und die niedrigrangigen Bits des nächsten Halbbytes (Maske 0x70) erhalten den Standardschalterzustand. (Seit Linux 1.1.54)
KDSKBLED
Setzt die Tastaturschalter CapsLock, NumLock, ScrollLock (nicht Lichter). argp ist ein vorzeichenloser long integer, der den gewünschten Schalterzustand enthält. Die niedrigrangigen drei Bits (Maske 0x7) enthalten den Schalterzustand und die niedrigrangigen Bits des nächsten Halbbytes (Maske 0x70) enthalten den Standardschalterzustand. (Seit Linux 1.1.54)
KDGKBTYPE
Tastaturtyp ermitteln. Dies liefert den Wert KB_101, definiert als 0x02.
KDADDIO
E/A-Port als gültig hinzufügen. Äquivalent zu ioperm(arg,1,1).
KDDELIO
E/A-Port als gültig löschen. Äquivalent zu ioperm(arg,1,0).
KDENABIO
E/A zur Videokarte aktivieren. Äquivalent zu ioperm(0x3b4, 0x3df-0x3b4+1, 1).
KDDISABIO
E/A zur Videokarte deaktivieren. Äquivalent zu ioperm(0x3b4, 0x3df-0x3b4+1, 0).
KDSETMODE
Text-/Graphikmodus setzen. argp ist ein vorzeichenloser long integer, der eines der folgenden enthält:
KD_TEXT 0x00
KD_GRAPHICS 0x01
KDGETMODE
Text-/Graphikmodus ermitteln. argp zeigt auf ein int, der auf einen der oben für KDSETMODE gezeigten Werte gesetzt wird.
KDMKTONE
Erzeugt einen Ton der angegebenen Länge. Die niedrigen 16 Bits des vorzeichnlosen long integers in argp legen die Periode in Uhrzyklen fest und die höheren 16 Bits ergeben die Dauer in ms. Falls die Dauer Null ist, wird der Klang abgestellt. Die Steuerung kehrt sofort zurück. Beispielsweise würde argp = (125<<16) + 0x637 den Klang festlegen, der normalerweise mit Strg-G verbunden ist. (So seit Linux 0.99pl1; defekt in Linux 2.1.49-50.)
KIOCSOUND
Beginnt oder beendet die Klangerzeugung. Die niedrigen 16 Bits von argp legen die Periode in Uhrzyklen fest (d.h. argp = 1193180/Frequenz). argp = 0 schaltet den Klang ab. In jedem Fall kehrt die Steuerung sofort zurück.
GIO_CMAP
Ermittelt die aktuelle Vorgabefarbzuordnungstabelle des Kernels. argp zeigt auf ein 48-byte-Feld. (Seit Linux 1.3.3.)
PIO_CMAP
Ändert die Standardfarbtabelle im Textmodus. argp zeigt auf ein 48-byte- Feld, das in dieser Reihenfolge die Rot-, Grün- und Blauwerte für die 16 verfügbaren Bildschirmfarben enthält: 0 ist aus und 255 volle Intensität. Die vorgegebenen Farben sind in dieser Reihenfolge: Schwarz, Dunkelrot, Dunkelgrün, Braun, Dunkelblau, Dunkelviolett, Dunkelzyan, Hellgrau, Dunkelgrau, Hellrot, Hellgrün, Gelb, Hellblau, Hellviolett, Hellzyan und Weiß. (Seit Linux 1.3.3.)
GIO_FONT
Ermittelt die 256-Zeichen-Bildschirmschrift in expandierter Form. argp zeigt auf ein 8192-Byte-Feld. Schlägt mit Fehlercode EINVAL fehl, falls die derzeit geladene Schrift eine 512-Zeichen-Schrift ist oder falls sich die Konsole nicht im Textmodus befindet.
GIO_FONTX
Ermittelt die Bildschirmschrift und zugehörige Informationen. argp zeigt auf ein struct consolefontdesc (siehe PIO_FONTX). Beim Aufruf sollte das Feld charcount auf die maximale Anzahl von Zeichen gesetzt werden, die in den Puffer passen, auf den chardata zeigt. Bei der Rückkehr sind charcount und charheight mit den respektiven Daten der aktuell geladenen Schrift gefüllt und das Feld chardata enthält die Schriftdaten, falls der ursprüngliche Wert von charcount anzeigt, dass genug Raum verfügbar war. Andernfalls bleibt der Puffer unverändert und errno ist auf ENOMEM gesetzt. (Seit Linux 1.3.1.)
PIO_FONT
Setzt die 256-Zeichen-Bildschirmschrift. Lädt Schrift in den EGA-/VGA-Zeichenerzeuger. argp zeigt auf eine 8192-Byte-Abbildung mit 32 Byte je Zeichen. Nur die ersten N davon werden für eine 8xN-Schrift (0 < N <= 32) benutzt. Dieser Aufruf annuliert außerdem das Abbilden per Unicode.
PIO_FONTX
Bildschirmschrift und zugehörige Renderinginformation setzen. argp zeigt auf ein

struct consolefontdesc {
    unsigned short charcount;  /* Zeichen in Schrift
                                  (256 oder 512) */
    unsigned short charheight; /* Scanzeilen pro
                                  Zeichen (1-32) */
    char          *chardata;   /* Schriftdaten in
                                  expandierter Form */
};

    

Falls nötig, wird die Größe des Bildschirms angemessen geändert und SIGWINCH an die entsprechenden Prozesse gesandt. Dieser Aufruf annuliert außerdem das Abbilden per Unicode.(Seit Linux 1.3.1.)
PIO_FONTRESET
Setzt die Bildschirmschrift, Größe und das Abbilden per Unicode auf die Voreinstellungen beim Systemstart zurück. argp wird nicht benutzt, sollte aber auf NULL gesetzt werden, um Kompatibilität mit zukünftigen Versionen von Linux sicherzustellen. (Seit Linux 1.3.28.)
GIO_SCRNMAP
Holt Bildschirmabbildung vom Kernel. argp zeigt auf einen Bereich der Größe E_TABSZ, der mit den benutzten Schriftpositionen geladen wird, um jedes Zeichen anzuzeigen. Dieser Aufruf wird wahrscheinlich nutzlose Informationen zurückgeben, falls die derzeit geladene Schrift mehr als 256 Zeichen hat.
GIO_UNISCRNMAP
Holt vollständige Unicode-Bildschirmabbildung vom Kernel. argp zeigt auf einen Bereich der Größe E_TABSZ*sizeof(unsigned short), der mit den Unicodes geladen ist, die jedes Zeichen darstellen. Ein besonderer Satz von Unicodes, der bei U+F000 anfängt, wird benutzt, um »direkt zur Schrift«-Abbildungen darzustellen. (Seit Linux 1.3.1.)
PIO_SCRNMAP
Lädt die »benutzerdefinierte« (vierte) Tabelle in den Kernel, die Bytes auf Konsolenschriftsymbole abbildet. argp zeigt auf ein Feld der Größe E_TABSZ.
PIO_UNISCRNMAP
Lädt die »benutzerdefinierbare« (vierte) Tabelle in den Kernel, die Bytes in Unicodes abbildet, die dann gemäß der derzeit geladenen Unicode-in-Schrift-Abbildung in Bildschirmsymbole übersetzt werden. Besondere Unicodes beginnen bei U+F000 und können benutzt werden, um direkt auf die Schriftsymbole abzubilden. (Seit Linux 1.3.1.)
GIO_UNIMAP
Holt Unicode-in-Schrift-Abbildung vom Kernel. argp zeigt auf ein

struct unimapdesc {
    unsigned short  entry_ct;
    struct unipair *entries;
};

    

wobei entries auf ein Feld der folgenden Form zeigt:

struct unipair {
    unsigned short unicode;
    unsigned short fontpos;
};

    

(seit Linux 1.1.92)
PIO_UNIMAP
Hinterlegt Unicode-in-Schrift-Abbildung im Kernel. argp zeigt auf ein struct unimapdesc. (Seit Linux 1.1.92)
PIO_UNIMAPCLR
Leert die Tabelle, informiert möglicherweise über den Hash-Algorithmus. argp zeigt auf ein

struct unimapinit {
    unsigned short advised_hashsize;  /* 0 falls keine Meinung */
    unsigned short advised_hashstep;  /* 0 falls keine Meinung */
    unsigned short advised_hashlevel; /* 0 falls keine Meinung */
};

    

(seit Linux 1.1.92)
KDGKBMODE
Ermittelt aktuellen Tastaturmodus. argp zeigt auf einen long, der auf einen der folgenden Werte gesetzt wird:
K_RAW 0x00 /* Roher (Scancode-)Modus */
K_XLATE 0x01 /* Übersetze Keycodes mittels Keymap */
K_MEDIUMRAW 0x02 /* Medium-roher (Scancode-)Modus */
K_UNICODE 0x03 /* Unicode-Modus */
K_OFF 0x04 /* Deaktivierter Modus; seit Linux 2.6.39 */
KDSKBMODE
Aktuellen Tastaturmodus setzen. argp ist ein long, der zu einem der oben für KDGKBMODE gezeigten Werte identisch ist.
KDGKBMETA
Ermittelt den Metatasten-Handhabungsmodus. argp zeigt auf einen long, der auf einen der folgenden gesetzt ist:
K_METABIT 0x03 setzt signifikantestes Bit
K_ESCPREFIX 0x04 Maskierungsvorsatz
KDSKBMETA
Setzt den Metatasten-Handhabungsmodus. argp zeigt auf einen long, der auf einen der für KDGKBMETA gezeigten Werte gesetzt ist.
KDGKBENT
Ermittelt einen Eintrag in der Tastenübersetzungstabelle (Tastencode zu Aktionscode). argp zeigt auf ein

struct kbentry {
    unsigned char  kb_table;
    unsigned char  kb_index;
    unsigned short kb_value;
};

    

wobei die ersten zwei Mitglieder ausgefüllt sind: kb_table wählt die Tastentabelle (0 <= kb_table < MAX_NR_KEYMAPS) und kb_index ist der Tastencode (0 <= kb_index < NR_KEYS). kb_value wird auf den entsprechenden Aktionscode oder K_HOLE, falls es keine solche Taste gibt, oder K_NOSUCHMAP, falls kb_table ungültig ist, gesetzt.
KDSKBENT
Wählt einen Eintrag in der Übersetzungstablle aus. argp zeigt auf ein struct kbentry.
KDGKBSENT
Ermittelt eine Funktionstastenzeichenkette. argp zeigt auf ein

struct kbsentry {
    unsigned char kb_func;
    unsigned char kb_string[512];
};

    

kb_string wird auf die (Null-terminierte) Zeichenkette gesetzt, die dem Aktionscode der kb_funcn Funktionstaste entspricht.
KDSKBSENT
Setzt einen Funktionstastenzeichenketteneintrag. argp zeigt auf ein struct kbsentry.
KDGKBDIACR
Liest die Akzenttabelle des Kernels. argp zeigt auf ein

struct kbdiacrs {
    unsigned int   kb_cnt;
    struct kbdiacr kbdiacr[256];
};

    

wobei kb_cnt die Anzahl der Einträge in dem Feld und jedes dieser ein folgendes ist:

struct kbdiacr {
    unsigned char diacr;
    unsigned char base;
    unsigned char result;
};

    

KDGETKEYCODE
Liest den Kernel-Keycode-Tabelleneintrag (Scancode nach Keycode). argp zeigt auf ein

struct kbkeycode {
    unsigned int scancode;
    unsigned int keycode;
};

    

keycode wird so eingestellt, dass er dem übergebenen scancode entspricht. (Nur 89 <= scancode <= 255. Für 1 <= scancode <= 88, keycode==scancode.) (Seit Linux 1.1.63.)
KDSETKEYCODE
Schreibt den Kernel-Tastaturcodetabelleneintrag. argp zeigt auf ein struct kbkeycode. (Seit Linux 1.1.63.)
KDSIGACCEPT
Der aufrufende Prozess zeigt an, dass er das Signal argp akzeptiert, wenn dieses durch Drücken der entsprechenden Tastenkombination erzeugt wird. (1 <= argp <= NSIG). (Siehe spawn_console() in linux/drivers/char/keyboard.c.)
VT_OPENQRY
Liefert die erste verfügbare (nicht geöffnete) Konsole zurück. argp zeigt auf ein int, der auf die Anzahl der VT gesetzt ist (1 <= *argp <= MAX_NR_CONSOLES).
VT_GETMODE
Modus eines aktiven VT ermitteln. argp zeigt auf ein

struct vt_mode {
    char  mode;    /* VT-Modus */
    char  waitv;   /* falls gesetzt: hängt bei Schreiben falls nicht aktiv */
    short relsig;  /* Signal, dass bei Freigabe-Anfragen ausgelöst werden soll */
    short acqsig;  /* Sginal, dass bei Erwerb ausgelöst werden soll */
    short frsig;   /* unbenutzt (auf 0 gesetzt) */
};

    

der auf einen der Modi des aktiven VT gesetzt ist. mode ist auf einen dieser Werte gesetzt:
VT_AUTO automatische VT-Umschaltung
VT_PROCESS Prozess steuert Umschaltung
VT_ACKACQ Umschaltung bestätigen
VT_SETMODE
Modus des aktiven VT setzen. argp zeigt auf ein struct vt_mode.
VT_GETSTATE
Globale VT-Zustandsinfo ermitteln. argp zeigt auf ein

struct vt_stat {
    unsigned short v_active;  /* Aktives VT */
    unsigned short v_signal;  /* zu sendendes Signal */
    unsigned short v_state;   /* VT-Bitmaske */
};

    

Für jedes verwandte VT wird das entsprechende Bit in der v_state-Mitgliedsgruppe gesetzt (Kernel 1.0 bis 1.1.92).
VT_RELDISP
Eine Anzeige freigeben.
VT_ACTIVATE
Umschalten auf VT argp (1 <= argp <= MAX_NR_CONSOLES).
VT_WAITACTIVE
Warten, bis VT argp aktiviert wurde.
VT_DISALLOCATE
Den VT argp zugeordneten Speicher freigeben. (Seit Linux 1.1.54)
VT_RESIZE
Die Vorstellung des Kernels über die Bildschirmgröße setzen. argp zeigt auf ein

struct vt_sizes {
    unsigned short v_rows;       /* # Zeilen */
    unsigned short v_cols;       /* # Spalten */
    unsigned short v_scrollsize; /* nicht mehr verwandt */
};

    

Beachten Sie, dass dies den Videomodus nicht ändert. Siehe resizecons(8). (seit Linux 1.1.54)
VT_RESIZEX
Die Vorstellung des Kernels über verschiedene Bildschirmparameter setzen. argp zeigt auf ein

struct vt_consize {
    unsigned short v_rows;  /* Zeilenanzahl */
    unsigned short v_cols;  /* Spaltenanzahl */
    unsigned short v_vlin;  /* Pixelzeilenanzahl auf Bildschirm
    unsigned short v_clin;  /* Pixelzeilenanzahl pro Zeichen
    unsigned short v_vcol;  /* Pixelspaltenanzahl auf Bildschirm
    unsigned short v_ccol;  /* Pixelspaltenanzahl pro Zeichen
};

    

Jeder Parameter darf auf Null gesetzt werden. Dies zeigt »keine Änderung« an. Falls aber mehrere Parameter gesetzt sind, müssen sie selbstkonsistent sein. Beachten Sie, dass dies nicht den Videomodus ändert. Siehe resizecons(8). (Seit Linux 1.3.3.).

Die Aktivität der folgenden Ioctls hängt vom ersten Byte in dem Struct ab, auf das argp zeigt, welches hier als subcode bezeichnet wird. Diese sind nur für den Superuser oder den Eigentümer des aktuellen Terminals gültig.

TIOCLINUX, subcode=0
Bild ausgeben. Verschwand in Linux 1.1.92. (Mit Kernel 1.1.92 und neuer lesen Sie stattdessen aus /dev/vcsN oder /dev/vcsaN.)
TIOCLINUX, subcode=1
Task-Informationen ermitteln. Verschwand in Linux 1.1.92.
TIOCLINUX, subcode=2
Auswahl setzen. argp zeigt auf

struct {
    char  subcode;
    short xs, ys, xe, ye;
    short sel_mode;
};

    

xs und ys sind die Anfangsspalte und -zeile. xe und ye sind die Endspalte und -zeile. (Obere linke Ecke ist Zeile=Spalte=1.) sel_mode ist 0 für Zeichen-für-Zeichen-Auswahl, 1 für Wort-für-Wort-Auswahl oder 2 für Zeile-für-Zeile-Auswahl. Die angegebenen Bildschirmzeichen werden hervorgehoben und in dem statischen Feld sel_buffer in devices/char/console.c gespeichert.
TIOCLINUX, subcode=3
Auswahl einfügen. Die Zeichen des Auswahlpuffers werden nach fd geschrieben.
TIOCLINUX, subcode=4
Bildabschaltung aufheben.
TIOCLINUX, subcode=5
Setzt die Inhalte einer 256-Bit-Nachschlagetabelle, die Zeichen in einem »Wort« für eine Wort-für-Wort-Auswahl definiert (seit Linux 1.1.32).
TIOCLINUX, subcode=6
argp zeigt auf ein Zeichen, das auf den Wert der Kernelvariable shift_state gesetzt ist. (Seit Linux 1.1.32)
TIOCLINUX, subcode=7
argp zeigt auf ein Zeichen, das auf den Wert der Kernelvariable report_mouse gesetzt ist. (Seit Linux 1.1.33)
TIOCLINUX, subcode=8
Bildschirmbreite und -höhe, Cursor-Position und alle Zeichen-Attribut-Paare ausgeben. (Nur Kernel 1.1.67 bis 1.1.91. Mit Kernel 1.1.92 und neuer lesen Sie stattdessen aus /dev/vcsa*.)
TIOCLINUX, subcode=9
Bildschirmbreite und -höhe, Cursor-Position und alle Zeichen-Attribut-Paare wiederherstellen. (Nur Kernel 1.1.67 bis 1.1.91. Mit Kernel 1.1.92 und neuer schreiben Sie stattdessen in /dev/vcsa*.)
TIOCLINUX, subcode=10
Handhabt die Stromsparfunktionen der neuen Bildschirmgeneration. VESA-Bildschirmleerungsmods wird mit argp[1] gesetzt, wodurch geregelt wird, was bei Bildschirmleerung passiert:
0:
Bildschirmleeren ist deaktiviert.
1:
Die aktuellen Videoadapterregistereinstellungen werden gespeichert. Dann wird der Controller programmiert, die vertikalen Synchronisationspulse zu deaktivieren. Dies versetzt den Bildschirm in den »standby«-Modus. Falls Ihr Bildschirm ein »Off_Mode«-Timer hat, dann wird er sich von selbst abschalten.
2:
Die aktuellen Einstellungen werden gespeichert, dann werden sowohl die vertikalen als auch die horizontalen Synchronisationspulse deaktiviert. Dies versetzt den Bildschirm in den »off«-Modus. Falls Ihr Bildschirm kein »Off_Mode«-Timer hat oder falls Sie möchten, dass sich Ihr Bildschirm sofort ausschaltet, wenn der »Off_Mode«-Timer abläuft, dann wählen Sie diese Option. (Vorsicht: Häufiges Herunterfahren wird den Bildschirm beschädigen.) (seit Linux 1.1.76)

Bei Erfolg wird 0 zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.

errno kann einer der folgenden Werte annehmen:
EBADF
Der Dateideskriptor ist ungültig.
EINVAL
Der Dateideskriptor oder argp ist ungültig.
ENOTTY
Der Dateideskriptor ist einem zeichenorientierten Spezialgerät zugeordnet oder die angegebene Anfrage passt nicht darauf.
EPERM
Unzureichende Berechtigung.

Warnung: Betrachten Sie diese Handbuchseite nicht als Dokumentation der Konsole-Ioctls von Linux. Sie wird nur für die Neugierigen als Alternative zum Lesen der Quellen bereitgestellt. Ioctls sind nicht dokumentierte Interna von Linux und können sich ohne Hinweis ändern. (Und tatsächlich beschreibt diese Handbuchseite mehr oder weniger die Situation von Kernel Version 1.1.94. Bei früheren Versionen gibt es viele kleine und nicht so kleine Unterschiede.)

Oft werden Ioctls für die Kommunikation zwischen dem Kernel und einem bestimmten, gut bekannten Programm eingeführt (Fdisk, Hdparm, Setserial, Tunelp, Loadkeys, Selection, Setfont, usw.). Sein Verhalten wird sich ändern, wenn es dieses bestimmte Programm erfordert.

Programme, die diese Ioctls verwenden, werden nicht auf andere Versionen von UNIX portierbar sein, sie werden nicht auf älteren Versionen von Linux und nicht auf zukünftigen Versionen von Linux funktionieren.

Verwenden Sie POSIX-Funktionen.

dumpkeys(1), kbd_mode(1), loadkeys(1), mknod(1), setleds(1), setmetamode(1), execve(2), fcntl(2), ioctl_tty(2), ioperm(2), termios(3), console_codes(4), mt(4), sd(4), tty(4), ttyS(4), vcs(4), vcsa(4), charsets(7), mapscrn(8), resizecons(8), setfont(8)

/usr/include/linux/kd.h, /usr/include/linux/vt.h

Diese Seite ist Teil der Veröffentlichung 5.03 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Chris Leick <c.leick@vollbio.de> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.

15. September 2017 Linux