ioctl_kd(2) System Calls Manual ioctl_kd(2) NAZWA ioctl_vt - funkcje ioctl konsoli i konsoli wirtualnych SKLADNIA #include /* Definicja zmiennych op */ #include int ioctl(int fd, unsigned long op, void *argp); OPIS Przedstawione ponizej operacje ioctl(2) sa specyficzne dla Linuksa i sa obslugiwane dla konsoli i konsoli wirtualnych. KDGETLED Pobranie stanu diod LED. argp wskazuje na zmienna typu char. Trzy najmniej znaczace bity *argp wskazuja 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 sa ustawiane odpowiednio do wartosci trzech najmniej znaczacych bitow liczby calkowitej bez znaku, typu long, w argp. Jednakze jesli ustawiony jest najbardziej znaczacy bit, stan diod wraca do stanu normalnego: odzwierciedla stan funkcji klawiatury caps lock, num lock i scroll lock. Przed Linuksem 1.1.54 diody odzwierciedlaly jedynie stan znacznikow klawiatury, a ioctl KDGETLED/KDSETLED zmienialy rowniez stan tych znacznikow. Od Linuksa 1.1.54 diody moga wyswietlac dowolna informacje, lecz standardowo wskazuja stan znacznikow klawiatury. Do zmiany znacznikow klawiatury sluza dwa nastepne wywolania funkcji ioctl. KDGKBLED Pobranie wartosci znacznikow klawiatury: CapsLock, NumLock, ScrollLock (znacznikow, nie stanu diod). argp wskazuje na zmienna typu char, do ktorej zostana przepisane wartosci znacznikow. Najnizsze trzy bity (maska 0x7) odzwierciedlaja stan znacznikow, a trzy najnizsze bity nastepnego bajtu (maska 0x70) zawieraja domyslne ustawienie znacznikow. (Od Linuksa 1.1.54). KDSKBLED Ustawienie wartosci znacznikow klawiatury: CapsLock, NumLock, ScrollLock (znacznikow, nie stanu diod). argp zawiera pozadany stan znacznikow. Trzy najnizsze bity (maska 0x7) zawieraja stan znacznikow, a trzy najnizsze bity nastepnego bajtu (maska 0x70) zawieraja domyslne ustawienie znacznikow. (Od Linuksa 1.1.54). KDGKBTYPE Pobranie typu klawiatury. Przekazuje wartosc KB_101, zdefiniowana jako 0x02; KDADDIO Dodanie portu we/wy jako poprawnego. Rownowazne funkcji ioperm(arg,1,1). KDDELIO Usuniecie portu we/wy z listy poprawnych portow. Rownowazne funkcji ioperm(arg,1,0). KDENABIO Wlaczenie dostepu do portow we/wy karty graficznej. Rownowazne wywolaniu ioperm(0x3b4, 0x3df-0x3b4+1, 1). KDDISABIO Wylaczenie dostepu do portow we/wy karty graficznej. Rownowazne wywolaniu ioperm(0x3b4, 0x3df-0x3b4+1, 0). KDSETMODE Wlaczenie trybu tekstowego/graficznego. argp jest liczba calkowita bez znaku zawierajaca jedna z wartosci: KD_TEXT 0x00 KD_GRAPHICS 0x01 KDGETMODE Pobranie informacji o ustawionym trybie: tekstowy/graficzny. argp wskazuje na zmienna int, ktorej zostanie nadana jedna z wartosci pokazanych wyzej dla KDSETMODE. KDMKTONE Wygenerowanie dzwieku o okreslonej dlugosci. Nizsze 16 bitow liczby calkowitej bez znaku, typu long, w argp, okresla czas wyrazony w cyklach zegara, a wyzsze 16 bitow podaje czas trwania w milisekundach. Jesli czas trwania jest rowny zeru, dzwiek zostaje wylaczony. Sterowanie jest przekazywane natychmiast. Na przyklad, argp = (125<<16) + 0x637 okresla dzwiek zwykle skojarzony ze znakiem Ctrl-G. (Od Linuksa 0.99pl1; nie dziala w Linuksie 2.1.49-50). KIOCSOUND Wlaczenie lub wylaczenie generowanie dzwiekow. Nizsze 16 bitow argp okresla czas trwania w cyklach zegara (tzn. argp = 1193180/czestotliwosc). Jesli argp = 0 wowczas dzwiek zostaje wylaczony. W kazdym z przypadkow sterowanie jest przekazywane natychmiast. GIO_CMAP Pobranie z jadra aktualnie obowiazujacej mapy kolorow. argp wskazuje na 48-bajtowa tablice. (Od Linuksa 1.3.3). PIO_CMAP Zmiana domyslnej mapy kolorow trybu tekstowego. argp wskazuje na 48-bajtowa tablice, ktora zawiera kolejno wartosci Red, Green i Blue dla dostepnych 16 kolorow ekranu: 0 brak, 255 pelna intensywnosc. Domyslnymi kolorami sa, w kolejnosci: czarny, ciemnoczerwony, ciemnozielony, brazowy, ciemnoniebieski, ciemnopurpurowy, ciemny niebieskozielony, jasnoszary, ciemnoszary, jasnoczerwony, jasnozielony, zolty, jasnoniebieski, jasnopurpurowy, jasny niebieskozielony i bialy. (Od Linuksa 1.3.3). GIO_FONT Pobranie 256-znakowej czcionki ekranowej w rozszerzonym formacie. argp wskazuje na tablice 8192 bajtow. Jesli obecnie zaladowana czcionka jest jedna z czcionek 512-bajtowych lub jesli konsola nie jest w trybie tekstowym, funkcja zwraca kod bledu EINVAL. GIO_FONTX Pobranie czcionki ekranowej i zwiazanych z nia informacji. argp wskazuje na strukture typu struct consolefontdesc (patrz PIO_FONTX). Przed wywolaniem funkcji, polu charcount powinna zostac nadana wartosc rowna maksymalnej liczbie znakow, jakie sie zmieszcza w buforze wskazywanym przez chardata. Po zakonczeniu, charcount i charheight sa wypelniane odpowiednimi informacjami dotyczacymi aktualnie zaladowanej czcionki, a tablica chardata zawiera informacje o foncie, o ile przekazana wartosc charcount wskazywala wystarczajaca ilosc miejsca; w przeciwnym razie bufor nie jest modyfikowany, a zmiennej errno nadawana jest wartosc ENOMEM. (Od Linuksa 1.3.1). PIO_FONT Ustawia 256-znakowa czcionke ekranowa. Laduje czcionke do generatora znakow karty EGA/VGA. argp wskazuje na 8192-bajtowa mape z 32 bajtami na jeden znak. W przypadku czcionek 8xN (0 < N <= 32) wykorzystywane jest tylko pierwszych N bajtow. Ta procedura uniewaznia jednoczesnie odwzorowanie Unicode. PIO_FONTX Ustawia czcionke ekranowa i zwiazane z nia informacje na temat jej prezentacji. argp wskazuje na struct consolefontdesc { unsigned short charcount; /* znakow w czcionce (256 lub 512) */ unsigned short charheight; /* wierszy skanowania w znaku (1-32) */ char *chardata; /* dane czcionki w postaci rozszerzonej */ }; Jesli jest to konieczne, ekran zostanie odpowiednio przeskalowany, a do odpowiednich procesow przeslany bedzie sygnal SIGWINCH. Ta procedura uniewaznia jednoczesnie odwzorowanie Unicode. (Od Linuksa 1.3.1). PIO_FONTRESET Inicjuje czcionke ekranowa, rozmiar i odwzorowanie Unicode do wartosci ustawionych podczas startu sytemu. argp nie jest uzywany, lecz powinien miec wartosc NULL, aby zapewnic zgodnosc z przyszlymi wersjami Linuksa. (Od Linuksa 1.3.28). GIO_SCRNMAP Pobranie z jadra odwzorowania ekranu. argp wskazuje na obszar o rozmiarze E_TABSZ, ktory jest wypelniany danymi czcionki sluzacymi do wyswietlenia poszczegolnych znakow. W przypadku gdy obecnie zaladowana czcionka zawiera wiecej niz 256 znakow, ta procedura najprawdopodobniej zwroci bezwartosciowe informacje. GIO_UNISCRNMAP Pobranie z jadra pelnego odwzorowania Unicode. argp wskazuje na obszar o rozmiarze E_TABSZ*sizeof(unsigned short), ktory jest wypelniany kodami Unicode odpowiednimi dla poszczegolnych znakow. Specjalny zestaw kodow Unicode, rozpoczynajacy sie od U+F000, sluzy do reprezentacji odwzorowania "bezposrednio na czcionke" ("direct to font"). (Od Linuksa 1.3.1). PIO_SCRNMAP Zaladowanie do jadra "definiowanej przez uzytkownika" (czwartej) tabeli odwzorowujacej bajty na symbole ekranu konsoli. argp wskazuje na obszar o rozmiarze E_TABSZ. PIO_UNISCRNMAP Zaladowanie do jadra "definiowanej przez uzytkownika" (czwartej) tabeli odwzorowujacej bajty na kody Unicode, ktore sa z kolei tlumaczone na symbole ekranowe zgodnie z aktualnie zaladowana tabela odwzorowania Unicode-na-czcionke. Do bezposredniego odwzorowania na symbole ekranowe moga byc wykorzystywane specjalne kody Unicode rozpoczynajace sie od U+F000. (Od Linuksa 1.3.1). GIO_UNIMAP Pobranie z jadra mapy odwzorowania Unicode-na-czcionke. argp wskazuje na strukture struct unimapdesc { unsigned short entry_ct; struct unipair *entries; }; w ktorej entries wskazuje na tablice struktur struct unipair { unsigned short unicode; unsigned short fontpos; }; (Od Linuksa 1.1.92). PIO_UNIMAP Zaladowanie do jadra mapy odwzorowania Unicode-na-czcionke. argp wskazuje na strukture struct unimapdesc. (Od Linuksa 1.1.92). PIO_UNIMAPCLR Wyczyszczenie tabeli, jesli mozliwe 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 zmienna typu long, ktorej zostanie nadana wartosc rowna jednej z ponizszych stalych: K_RAW 0x00 /* Tryb surowy (scancode) */ K_XLATE 0x01 /* Tlumaczy kody klawiszy za pomoca mapy klawiszy */ K_MEDIUMRAW 0x02 /* Tryb umiarkowanie surowy (scancode) */ K_UNICODE 0x03 /* Tryb unikodowy */ K_OFF 0x04 /* Tryb wylaczony; od Linuksa 2.6.39 */ KDSKBMODE Ustawienie aktualnego stanu klawiatury. argp wskazuje na zmienna typu long o wartosci rownej jednej ze stalych pokazanych dla KDGKBMODE. KDGKBMETA Pobranie trybu obslugi klawisza meta. argp wskazuje na zmienna typu long, ktorej zostanie nadana wartosc rowna jednej z ponizszych stalych: K_METABIT 0x03 ustawia najbardziej znaczacy bit K_ESCPREFIX 0x04 prefix ucieczki KDSKBMETA Ustawienie trybu obslugi klawisza meta. argp wskazuje na zmienna typu long o wartosci rownej jednej z pokazanych wyzej stalych dla KDGKBMETA. KDGKBENT Pobranie jednej pozycji z tabeli translacji klawiszy (kod klawisza (keycode) na kod akcji). argp wskazuje na strukture struct kbentry { unsigned char kb_table; unsigned char kb_index; unsigned short kb_value; }; ktorej pierwsze dwa pola maja nadane wartosci o nastepujacym znaczeniu: kb_table okresla 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, jesli nie ma takiego klawisza, albo K_NOSUCHMAP, jesli kb_table jest niepoprawne. KDSKBENT Nadanie wartosci jednej pozycji tabeli translacji. argp wskazuje na strukture typu struct kbentry. KDGKBSENT Pobranie lancucha znakow przypisanego klawiszowi funkcyjnemu. argp wskazuje na strukture struct kbsentry { unsigned char kb_func; unsigned char kb_string[512]; }; Do kb_string przypisywany jest (zakonczony znakiem NULL) lancuch znakow, odpowiadajacy kodowi akcji kb_func-tego klawisza funkcyjnego. KDSKBSENT Przypisuje klawiszowi funkcyjnemu lancuch znakow. argp wskazuje na strukture typu struct kbsentry. KDGKBDIACR Odczytanie tabeli akcentow jadra. argp wskazuje na strukture struct kbdiacrs { unsigned int kb_cnt; struct kbdiacr kbdiacr[256]; }; gdzie kb_cnt oznacza liczbe pozycji w tablicy, z ktorych kazda jest struktura struct kbdiacr { unsigned char diacr; unsigned char base; unsigned char result; }; KDGETKEYCODE Odczytanie pozycji z tabeli kodow klawiszy (scan code to keycode). argp wskazuje na strukture struct kbkeycode { unsigned int scancode; unsigned int keycode; }; keycode otrzymuje wartosc odpowiednia 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 kodow klawiszy jadra. argp wskazuje na strukture struct kbkeycode. (Od Linuksa 1.1.63). KDSIGACCEPT Proces wywolujacy te funkcje wskazuje swa chec do przyjecia sygnalu argp, generowanego przez wcisniecie odpowiedniej kombinacji klawiszy. (1 <= argp <= NSIG). (Patrz spawn_console() w linux/drivers/char/keyboard.c.) WARTOSC ZWRACANA Funkcja zwraca 0, jezeli zakonczy sie pomyslnie (chyba ze zaznaczono inaczej). Jesli wystapi blad zwraca -1 i ustawia errno wskazujac blad. BLEDY EINVAL argp jest niepoprawne. STANDARDY Linux. ZOBACZ TAKZE ioctl(2), ioctl_console(2) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Piotr Pogorzelski , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. ioctl_kd(2)