NAZWA¶
console_ioctl - funkcje ioctl konsoli i konsoli wirtualnych
OPIS¶
Przedstawione poniżej żądania
ioctl(2) są specyficzne
dla Linuksa. Wymagają trzeciego parametru, nazywanego tu
argp.
- KDGETLED
- Pobranie stanu diod LED. argp wskazuje na
zmienną typu char. Trzy najmniej znaczące bity
*argp wskazują aktualny stan diod wg schematu:
LED_CAP 0x04 dioda caps lock
LEC_NUM 0x02 dioda num lock
LED_SCR 0x01 dioda scroll lock
- KDSETLED
- Ustawienie diod LED. Diody są ustawiane odpowiednio do
wartości trzech najmniej znaczących bitów argp.
Jednakże jeśli ustawiony jest najbardziej znaczący bit,
stan diod wraca do stanu normalnego: odzwierciedla stan funkcji klawiatury
caps lock, num lock i scroll lock.
W jądrach przed 1.1.54 diody odzwierciedlały jedynie stan
znaczników klawiatury, a ioctl KDGETLED/KDSETLED zmieniały
również stan tych znaczników. Od wersji 1.1.54 diody mogą
wyświetlać dowolną informację, lecz standardowo
wskazują stan znaczników klawiatury. Do zmiany znaczników
klawiatury służą dwa następne wywołania funkcji
ioctl.
- KDGKBLED
- Pobranie wartości znaczników klawiatury:
CapsLock, NumLock, ScrollLock (znaczników, nie stanu diod).
argp wskazuje na zmienną typu char, do której
zostaną przepisane wartości znaczników. Najniższe trzy
bity (maska 0x7) odzwierciedlają stan znaczników, a trzy
najniższe bity następnego bajtu (maska 0x70) zawierają
domyślne ustawienie znaczników. (Od wersji 1.1.54.)
- KDSKBLED
- Ustawienie wartości znaczników klawiatury:
CapsLock, NumLock, ScrollLock (znaczników, nie stanu diod).
argp zawiera pożądany stan znaczników. Trzy
najniższe bity (maska 0x7) zawierają stan znaczników, a
trzy najniższe bity następnego bajtu (maska 0x70) zawierają
domyślne ustawienie znaczników. (Od wersji 1.1.54.)
- KDGKBTYPE
- Pobranie typu klawiatury. Przekazuje wartość
KB_101, zdefiniowaną jako 0x02;
- KDADDIO
- Dodanie portu we/wy jako poprawnego. Równoważne
funkcji ioperm(arg,1,1).
- KDDELIO
- Usunięcie portu we/wy z listy poprawnych portów.
Równoważne funkcji ioperm(arg,1,0).
- KDENABIO
- Włączenie dostępu do portów we/wy karty
graficznej. Równoważne wywołaniu ioperm(0x3b4,
0x3df-0x3b4+1, 1).
- KDDISABIO
- Wyłączenie dostępu do portów we/wy
karty graficznej. Równoważne wywołaniu ioperm(0x3b4,
0x3df-0x3b4+1, 0).
- KDSETMODE
- Włączenie trybu tekstowego/graficznego.
argp przyjmuje wartość:
KD_TEXT 0x00
KD_GRAPHICS 0x01
- KDGETMODE
- Pobranie informacji o ustawionym trybie:
tekstowy/graficzny. argp wskazuje na zmienną typu long,
której zostanie nadana jedna z podanych wyżej
wartości.
- KDMKTONE
- Wygenerowanie dźwięku o określonej
długości. Niższe 16 bitów argp określa
czas wyrażony w cyklach zegara, a wyższe 16 bitów podaje
czas trwania w milisekundach. Jeśli czas trwania jest równy
zeru, dźwięk zostaje wyłączony. Sterowanie jest
przekazywane natychmiast. Na przykład, argp = (125<<16)
+ 0x637 określa dźwięk zwykle skojarzony ze znakiem Ctrl-G.
(Od wersji 0.99pl1; nie działa w 2.1.49-50.)
- KIOCSOUND
- Włączenie lub wyłączenie generowanie
dźwięków. Niższe 16 bitów argp
określa czas trwania w cyklach zegara (tzn. argp =
1193180/częstotliwość). Jeśli argp = 0
wówczas dźwięk zostaje wyłączony. W każdym z
przypadków sterowanie jest przekazywane natychmiast.
- GIO_CMAP
- Pobranie z jądra aktualnie obowiązującej
mapy kolorów. argp wskazuje na 48-bajtową tablicę.
(Od wersji 1.3.3)
- PIO_CMAP
- Zmiana domyślnej mapy kolorów trybu tekstowego.
argp wskazuje na 48-bajtową tablicę, która zawiera
kolejno wartości Red, Green i Blue dla dostępnych 16
kolorów ekranu: 0 brak, 255 pełna intensywność.
Domyślnymi kolorami są, w kolejności: czarny,
ciemnoczerwony, ciemnozielony, brązowy, ciemnoniebieski,
ciemnopurpurowy, ciemny niebieskozielony, jasnoszary, ciemnoszary,
jasnoczerwony, jasnozielony, żółty, jasnoniebieski,
jasnopurpurowy, jasny niebieskozielony i biały. (Od wersji
1.3.3.)
- GIO_FONT
- Pobranie 256-znakowej czcionki ekranowej w rozszerzonym
formacie. argp wskazuje na tablicę 8192 bajtów.
Jeśli obecnie załadowana czcionka jest jedną z czcionek
512-bajtowych lub jeśli konsola nie jest w trybie tekstowym, funkcja
zwraca kod błędu EINVAL.
- GIO_FONTX
- Pobranie czcionki ekranowej i związanych z nią
informacji. argp wskazuje na strukturę typu struct
consolefontdesc (patrz PIO_FONTX). Przed wywołaniem
funkcji, polu charcount powinna zostać nadana
wartość równa maksymalnej liczbie znaków, jakie
się zmieszczą w buforze wskazywanym przez chardata. Po
zakończeniu, charcount i charheight są
wypełniane odpowiednimi informacjami dotyczącymi aktualnie
załadowanej czcionki, a tablica chardata zawiera informacje o
foncie, o ile przekazana wartość charcount
wskazywała wystarczającą ilość miejsca; w
przeciwnym razie bufor nie jest modyfikowany, a zmiennej errno
nadawana jest wartość ENOMEM. (Od wersji 1.3.1.)
- PIO_FONT
- Ustawia 256-znakową czcionkę ekranową.
Ładuje czcionkę do generatora znaków karty EGA/VGA.
argp wskazuje na 8192-bajtową mapę z 32 bajtami na jeden
znak. W przypadku czcionek 8x N (0 < N <= 32)
wykorzystywane jest tylko pierwszych N bajtów. Ta procedura
unieważnia jednocześnie odwzorowanie Unicode.
- PIO_FONTX
- Ustawia czcionkę ekranową i związane z
nią informacje na temat jej prezentacji. argp wskazuje na
strukturę
struct consolefontdesc {
unsigned short charcount; /* znaków w czcionce
(256 lub 512) */
unsigned short charheight; /* wierszy skanowania
w znaku (1-32) */
char *chardata; /* dane czcionki w
postaci rozszerzonej */
};
Jeśli jest to konieczne, ekran zostanie odpowiednio przeskalowany, a do
odpowiednich procesów przesłany będzie sygnał
SIGWINCH. Ta procedura unieważnia jednocześnie
odwzorowanie Unicode. (Od wersji 1.3.1).
- PIO_FONTRESET
- Inicjuje czcionkę ekranową, rozmiar i
odwzorowanie Unicode do wartości ustawionych podczas startu sytemu.
argp nie jest używany, lecz powinien mieć
wartość NULL, aby zapewnić zgodność z
przyszłymi wersjami Linuksa. (Od wersji 1.3.28).
- GIO_SCRNMAP
- Pobranie z jądra odwzorowania ekranu. argp
wskazuje na obszar o rozmiarze E_TABSZ, który jest wypełniany
danymi czcionki służącymi do wyświetlenia
poszczególnych znaków. W przypadku gdy obecnie załadowana
czcionka zawiera więcej niż 256 znaków, ta procedura
najprawdopodobniej zwróci bezwartościowe informacje.
- GIO_UNISCRNMAP
- Pobranie z jądra pełnego odwzorowania Unicode.
argp wskazuje na obszar o rozmiarze E_TABSZ*sizeof(unsigned short),
który jest wypełniany kodami Unicode odpowiednimi dla
poszczególnych znaków. Specjalny zestaw kodów Unicode,
rozpoczynający się od U+F000, służy do reprezentacji
odwzorowania "bezpośrednio na czcionkę" ("direct
to font"). (Od wersji 1.3.1).
- PIO_SCRNMAP
- Załadowanie do jądra "definiowanej przez
użytkownika" (czwartej) tabeli odwzorowującej bajty na
symbole ekranu konsoli. argp wskazuje na obszar o rozmiarze
E_TABSZ.
- PIO_UNISCRNMAP
- Załadowanie do jądra "definiowanej przez
użytkownika" (czwartej) tabeli odwzorowującej bajty na kody
Unicode, które są z kolei tłumaczone na symbole ekranowe
zgodnie z aktualnie załadowaną tabelą odwzorowania
Unicode-na-czcionkę. Do bezpośredniego odwzorowania na symbole
ekranowe mogą być wykorzystywane specjalne kody Unicode
rozpoczynające się od U+F000. (Od wersji 1.3.1).
- GIO_UNIMAP
- Pobranie z jądra mapy odwzorowania
Unicode-na-czcionkę. argp wskazuje na strukturę
struct unimapdesc {
unsigned short entry_ct;
struct unipair *entries;
};
w której entries wskazuje na tablicę struktur
struct unipair {
unsigned short unicode;
unsigned short fontpos;
};
(Od wersji 1.1.92.)
- PIO_UNIMAP
- Załadowanie do jądra mapy odwzorowania
Unicode-na-czcionkę
argp wskazuje na strukturę struct unimapdesc. (Od wersji
1.1.92)
- PIO_UNIMAPCLR
- Wyczyszczenie tabeli, jeśli możliwe proponuje
algorytm z mieszaniem (hash). argp wskazuje na
struct unimapinit {
unsigned short advised_hashsize; /* 0 przy braku opinii */
unsigned short advised_hashstep; /* 0 przy braku opinii */
unsigned short advised_hashlevel; /* 0 przy braku opinii */
};
(Od wersji 1.1.92.)
- KDGKBMODE
- Pobranie aktualnego stanu klawiatury. argp wskazuje
na zmienną typu long, której zostanie nadana
wartość równa jednej z poniższych stałych:
K_RAW 0x00
K_XLATE 0x01
K_MEDIUMRAW 0x02
K_UNICODE 0x03
- KDSKBMODE
- Ustawienie aktualnego stanu klawiatury. argp
wskazuje na zmienną typu long o wartości równej
jednej z powyższych stałych.
- KDGKBMETA
- Pobranie trybu obsługi klawisza meta. argp
wskazuje na zmienną typu long, której zostanie nadana
wartość równa jednej z poniższych stałych:
K_METABIT 0x03 ustawienie najwyższego bitu
K_ESCPREFIX 0x04 kod przedrostkowy znaku ucieczki
- KDSKBMETA
- Ustawienie trybu obsługi klawisza meta. argp
wskazuje na zmienną typu long o wartości równej
jednej z powyższych stałych.
- KDGKBENT
- Pobranie jednej pozycji z tabeli translacji klawiszy (kod
klawisza (keycode) na kod akcji). argp wskazuje na strukturę
struct kbentry {
unsigned char kb_table;
unsigned char kb_index;
unsigned short kb_value;
};
której pierwsze dwa pola mają nadane wartości o
następującym znaczeniu: kb_table określa rodzaj
tabeli (0 <= kb_table < MAX_NR_KEYMAPS), a kb_index
oznacza kod klawisza (keycode) (0 <= kb_index < NR_KEYS).
Polu kb_value zostaje nadany odpowiedni kod akcji lub K_HOLE,
jeśli nie ma takiego klawisza, albo K_NOSUCHMAP, jeśli
kb_table jest niepoprawne.
- KDSKBENT
- Nadanie wartości jednej pozycji tabeli translacji.
argp wskazuje na strukturę typu struct kbentry.
- KDGKBSENT
- Pobranie łańcucha znaków przypisanego
klawiszowi funkcyjnemu. argp wskazuje na strukturę
struct kbsentry {
unsigned char kb_func;
unsigned char kb_string[512];
};
Do kb_string przypisywany jest (zakończony znakiem NULL)
łańcuch znaków, odpowiadający kodowi akcji
kb_func-tego klawisza funkcyjnego.
- KDSKBSENT
- Przypisuje klawiszowi funkcyjnemu łańcuch
znaków. argp wskazuje na strukturę typu struct
kbsentry.
- KDGKBDIACR
- Odczytanie tabeli akcentów jądra. argp
wskazuje na strukturę
struct kbdiacrs {
unsigned int kb_cnt;
struct kbdiacr kbdiacr[256];
};
gdzie kb_cnt oznacza liczbę pozycji w tablicy, z których
każda jest strukturą
struct kbdiacr {
unsigned char diacr;
unsigned char base;
unsigned char result;
};
- KDGETKEYCODE
- Odczytanie pozycji z tabeli kodów klawiszy (scan code
to keycode). argp wskazuje na strukturę
struct kbkeycode {
unsigned int scancode;
unsigned int keycode;
};
keycode otrzymuje wartość odpowiednią dla podanego
scancode. (Tylko z zakresu 89 <= scancode <= 255. Dla
1 <= scancode <= 88, jest keycode==scancode.)
(Od wersji 1.1.63.)
- KDSETKEYCODE
- Zapisanie pozycji w tabeli kodów klawiszy jądra.
argp wskazuje na strukturę struct kbkeycode. (Od wersji
1.1.63).
- KDSIGACCEPT
- Proces wywołujący tę funkcję wskazuje
swą chęć do przyjęcia sygnału argp,
generowanego przez wciśnięcie odpowiedniej kombinacji klawiszy.
(1 <= argp <= NSIG). (Patrz spawn_console() w
linux/drivers/char/keyboard.c.)
- VT_OPENQRY
- Przekazanie pierwszej dostępnej (ale nie otwartej)
konsoli. argp wskazuje na zmienną typu int, której
zostanie nadana wartość równa numerowi konsoli wirtualnej
(1 <= *argp <= MAX_NR_CONSOLES).
- VT_GETMODE
- Pobranie trybu aktywnej konsoli wirtualnej. argp
wskazuje na strukturę
struct vt_mode {
char mode; /* tryb konsoli wirtualnej */
char waitv; /* jeśli ustawione, czeka przy zapisie
jeśli konsola wirt. nie jest aktywna */
short relsig; /* sygnał w przypadku zwolnienia */
short acqsig; /* sygnał w przypadku uzyskania */
short frsig; /* niewykorzystane (równe 0) */
};
w której przekazywany jest tryb pracy bieżącej konsoli
wirtualnej. mode może przyjmować następujące
wartości:
VT_AUTO automatyczne przełączanie vt
VT_PROCESS przełączanie sterowane przez proces
VT_ACKACQ potwierdzanie przełączenia
- VT_SETMODE
- Ustawienie trybu aktywnej konsoli wirtualnej. argp
wskazuje na strukturę struct vt_mode.
- VT_GETSTATE
- Pobranie globalnych informacji o stanie konsoli wirtualnej.
argp wskazuje na strukturę
struct vt_stat {
unsigned short v_active; /* aktywna konsola wirtualna */
unsigned short v_signal; /* sygnał do wysłania */
unsigned short v_state; /* maska bitowa konsoli wirt. */
};
struct vt_stat {
ushort v_active; /* aktywna konsola wirtualna */
ushort v_signal; /* sygnał do wysłania */
ushort v_state; /* maska bitowa konsoli wirt. */
};
Dla każdej aktualnie używanej konsoli ustawiany jest odpowiedni
bit w polu v_state. (Jądra od 1.0 do 1.1.92.)
- VT_RELDISP
- Zwolnienie ekranu.
- VT_ACTIVATE
- Przełączenie na konsolę argp (1 <=
argp <= MAX_NR_CONSOLES).
- VT_WAITACTIVE
- Oczekiwanie na aktywację konsoli wirtualnej
argp.
- VT_DISALLOCATE
- Zwolnienie pamięci przydzielonej dla konsoli
wirtualnej argp. (Od wersji 1.1.54).
- VT_RESIZE
- Zmiana wyobrażenia jądra o rozmiarach ekranu.
argp wskazuje na strukturę
struct vt_sizes {
unsigned short v_rows; /* liczba wierszy */
unsigned short v_cols; /* liczba kolumn */
unsigned short v_scrollsize; /* już nieużywane */
};
Należy pamiętać, że nie zmienia to trybu karty
graficznej. Patrz resizecons(8). (Od wersji 1.1.54.)
- VT_RESIZEX
- Zmiana wyobrażenia jądra o różnych
parametrach ekranu. argp wskazuje na strukturę
struct vt_consize {
unsigned short v_rows; /* liczba wierszy */
unsigned short v_cols; /* liczba kolumn */
unsigned short v_vlin; /* liczba wierszy pikseli
na ekranie */
unsigned short v_clin; /* liczba wierszy pikseli
na znak */
unsigned short v_vcol; /* liczba kolumn pikseli
na ekranie */
unsigned short v_ccol; /* liczba kolumn pikseli
na znak */
};
Każdy z parametrów może mieć wartość
zerową, co oznacza "nie zmieniać", lecz jeśli
jednocześnie zmienianych jest kilka parametrów, muszą one
być ze sobą zgodne. Należy pamiętać, że nie
zmienia to trybu karty graficznej. Patrz resizecons(8). (Od wersji
1.3.3).
Działanie poniższych funkcji ioctl jest zależne od wartości
pierwszego bajtu struktury wskazywanej przez
argp, tutaj oznaczanego
jako
subcode. Mogą z nich korzystać jedynie administrator i
właściciel bieżącej konsoli.
- TIOCLINUX, subcode=0
- Zrzut ekranu. Zniknęło w 1.1.92. (W jądrach
1.1.92 i późniejszych, należy zamiast tego czytać z
/dev/vcsN lub /dev/vcsaN).
- TIOCLINUX, subcode=1
- Pobranie informacji o zadaniu. Zniknęło w wersji
1.1.92.
- TIOCLINUX, subcode=2
- Ustawienie zaznaczenia. argp wskazuje na
strukturę
struct {
char subcode;
short xs, ys, xe, ye;
short sel_mode;
};
xs i ys oznaczają początkową kolumnę i
wiersz. xe i ye oznaczają końcową
kolumnę i wiersz. (Górny lewy róg ma
współrzędne wiersz=kolumna=1.) sel_mode jest
równe 0 w przypadku zaznaczania znak po znaku, 1 - słowo po
słowie, lub 2 - wiersz po wierszu. Zaznaczone znaki ekranowe są
podświetlone i zachowane w statycznej tablicy sel_buffer
zdefiniowanej w devices/char/console.c.
- TIOCLINUX, subcode=3
- Wstawienie zaznaczenia. Znaki znajdujące się w
buforze zaznaczenia są zapisywane do fd.
- TIOCLINUX, subcode=4
- Odtworzenie ekranu po wygaszeniu.
- TIOCLINUX, subcode=5
- Wypełnienie 256-bitowej tablicy definiującej
znaki w "słowie" dla zaznaczania
"słowo-po-słowie". (Od wersji 1.1.32).
- TIOCLINUX, subcode=6
- argp wskazuje na zmienną typu char,
której nadawana jest wartość zmiennej jądra
shift_state. (Od wersji 1.1.32).
- TIOCLINUX, subcode=7
- argp wskazuje na zmienną typu char,
której nadawana jest wartość zmiennej jądra
report_mouse. (Od wersji 1.1.33).
- TIOCLINUX, subcode=8
- Zrzucenie informacji o szerokości i wysokości
ekranu, pozycji kursora i wszystkich parach znak-atrybuty. (Tylko
jądra od 1.1.67 do 1.1.91. Począwszy od 1.1.92 można
przeczytać wszystkie te informacje z /dev/vcsa*).
- TIOCLINUX, subcode=9
- Odtworzenie rozmiaru ekranu, położenia kursora i
wszystkich par znak-atrybut. (Tylko jądra od 1.1.67 do 1.1.91.
Począwszy od jądra 1.1.92, można to wykonać przez
zapis do /dev/vcsa*.)
- TIOCLINUX, subcode=10
- Obsługuje funkcję oszczędzania energii
(Power Saving) monitorów nowej generacji. Tryb wygaszania ekranu VESA
przyjmuje wartość argp[1], co powoduje sterowanie
wygaszaniem ekranu w sposób następujący:
0: Wygaszanie ekranu jest wyłączone.
1: Aktualne zawartości rejestrów karty graficznej
zostają zachowane, następnie sterownik zostaje zaprogramowany
tak, aby wyłączył impulsy synchronizacji pionowej. Powoduje
to przestawienie monitora w tryb oczekiwania (standby). Jeśli monitor
posiada licznik czasowy Off_Mode, wtedy może ewentualnie sam
wyłączyć zasilanie.
2: Zostają zachowane aktualne ustawienia, następnie
wyłączane są zarówno impulsy synchronizacji
zarówno pionowej, jak i poziomej. Powoduje to wyłączenie
monitora (tryb "off"). Opcję tę należy
wybrać jeśli monitor nie posiada licznika czasowego Off_Mode lub
jeśli chcemy aby monitor wyłączył się
natychmiast. ( Ostrzeżenie: Częste wyłączanie
zasilania może uszkodzić monitor.)
(Od wersji 1.1.76.)
WARTOŚĆ ZWRACANA¶
Funkcja zwraca 0, jeżeli zakończy się pomyślnie. Jeśli
wystąpi błąd zwraca -1 i ustawia
errno.
BŁĘDY¶
errno może przyjmować następujące wartości:
- EBADF
- Deskryptor pliku jest nieprawidłowy.
- ENOTTY
- Deskryptor pliku nie jest skojarzony ze specjalnym
urządzeniem znakowym lub podane polecenie nie ma do niego
zastosowania.
- EINVAL
- Deskryptor pliku lub argp jest niepoprawny.
- EPERM
- Niewystarczające uprawnienia.
UWAGI¶
Ostrzeżenie: Nie należy traktować tej strony
podręcznika jak dokumentacji funkcji ioctl konsoli Linuksa. Strona jest
przeznaczona dla ciekawskich jako alternatywa wobec czytania
źródeł jądra. Funkcje ioctl są nieudokumentowanymi
funkcjami wewnętrznymi Linuksa, które mogą ulec zmianie bez
ostrzeżenia (i rzeczywiście, ten dokument odzwierciedla w
sposób mniej lub bardziej dokładny sytuację dla jądra w
wersji 1.1.94; istnieje wiele mniej i bardziej znaczących
różnic w stosunku do poprzednich wersji).
Bardzo często wywołania funkcji ioctl są wprowadzane w celu
komunikacji pomiędzy jądrem i szczególnymi, dobrze znanymi
programami (fdisk, hdparm, setserial, tunelp, loadkeys, selection, setfont
itd.) i ich zachowanie zostanie zmienione, kiedy będzie tego wymagał
któryś z tych programów.
Programy korzystające z tych wywołań ioctl nie będą
przenośne na inne systemy Unix, nie będą działać
poprawnie ze starszymi wersjami jądra Linuksa, ani nie będą
współpracować z przyszłymi wersjami jądra.
Należy korzystać z funkcji zgodnych z POSIX.
ZOBACZ TAKŻE¶
dumpkeys(1),
kbd_mode(1),
loadkeys(1),
mknod(1),
setleds(1),
setmetamode(1),
execve(2),
fcntl(2),
ioperm(2),
termios(3),
console(4),
console_codes(4),
mt(4),
sd(4),
tty(4),
tty_ioctl(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
O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 3.40 projektu Linux
man-pages. Opis projektu oraz informacje dotyczące zgłaszania
błędów można znaleźć pod adresem
http://www.kernel.org/doc/man-pages/.
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
są: Piotr Pogorzelski (PTM) <piotr.pogorzelski@ippt.gov.pl>,
Andrzej M. Krzysztofowicz (PTM) <ankry@green.mf.pg.gda.pl> i Michał
Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl;
uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją
3.40 oryginału.