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
vorzeichenlosen »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.10 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/.
ÜBERSETZUNG
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 die
Mailingliste
der Übersetzer.