ioctl_vt - funkcje ioctl konsoli i konsoli wirtualnych
#include <linux/kd.h> /* Definicja zmiennych op */
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long op, void *argp);
Przedstawione poniżej operacje ioctl(2) są
specyficzne dla Linuksa i są obsługiwane dla konsoli i konsoli
wirtualnych.
- 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 |
| LED_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 liczby
całkowitej bez znaku, typu long, 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.
Przed Linuksem 1.1.54 diody odzwierciedlały jedynie stan
znaczników klawiatury, a ioctl KDGETLED/KDSETLED zmieniały
również stan tych znaczników. Od Linuksa 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 Linuksa 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 Linuksa
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 jest
liczbą całkowitą bez znaku zawierającą
jedną z wartości:
| KD_TEXT |
0x00 |
| KD_GRAPHICS |
0x01 |
- KDGETMODE
- Pobranie informacji o ustawionym trybie: tekstowy/graficzny. argp
wskazuje na zmienną int, której zostanie nadana jedna
z wartości pokazanych wyżej dla KDSETMODE.
- KDMKTONE
- Wygenerowanie dźwięku o określonej
długości. Niższe 16 bitów liczby
całkowitej bez znaku, typu long, 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 Linuksa 0.99pl1; nie działa w
Linuksie 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 Linuksa 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 Linuksa
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 Linuksa 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 8xN (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
-
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 Linuksa 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 Linuksa 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 Linuksa
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
Linuksa 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 Linuksa 1.1.92).
- PIO_UNIMAP
- Załadowanie do jądra mapy odwzorowania
Unicode-na-czcionkę. argp wskazuje na strukturę
struct unimapdesc. (Od Linuksa 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 Linuksa 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 /* Tryb surowy (scancode) */ |
| K_XLATE |
0x01 /* Tłumaczy kody klawiszy za pomocą mapy klawiszy
*/ |
| K_MEDIUMRAW |
0x02 /* Tryb umiarkowanie surowy (scancode) */ |
| K_UNICODE |
0x03 /* Tryb unikodowy */ |
| K_OFF |
0x04 /* Tryb wyłączony; od Linuksa 2.6.39 */ |
- KDSKBMODE
- Ustawienie aktualnego stanu klawiatury. argp wskazuje na
zmienną typu long o wartości równej jednej ze
stałych pokazanych dla KDGKBMODE.
- 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 |
ustawia najbardziej znaczący bit |
| K_ESCPREFIX |
0x04 |
prefix ucieczki |
- KDSKBMETA
- Ustawienie trybu obsługi klawisza meta. argp wskazuje na
zmienną typu long o wartości równej jednej z
pokazanych wyżej stałych dla KDGKBMETA.
- 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 Linuksa 1.1.63).
- KDSETKEYCODE
- Zapisanie pozycji w tabeli kodów klawiszy jądra. argp
wskazuje na strukturę struct kbkeycode. (Od Linuksa
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.)
Funkcja zwraca 0, jeżeli zakończy się
pomyślnie (chyba że zaznaczono inaczej). Jeśli
wystąpi błąd zwraca -1 i ustawia errno
wskazując błąd.
Tłumaczenie niniejszej strony podręcznika: Piotr
Pogorzelski <piotr.pogorzelski@ippt.gov.pl>, Andrzej Krzysztofowicz
<ankry@green.mf.pg.gda.pl> i Michał Kułach
<michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną
dokumentacją. Bliższe informacje o warunkach licencji
można uzyskać zapoznając się z
GNU General
Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika
prosimy zgłaszać na adres listy dyskusyjnej
manpages-pl-list@lists.sourceforge.net.