eksperymentowania z zdarzeniami przy użyciu polecenia <em>xev</em>.
Uruchomienie tego polecenia spowoduje otworzenie okna, po którym
możemy jeździć kursorem i na nim klikać, natomiast w terminalu
- polecenie zajmie się obróbką tych zdarzeń i ich przedwieniem
+ polecenie zajmie się obróbką tych zdarzeń i ich przedstawieniem
użytkownikowi.
</p>
<pre class="code-block">
i przesunięcie kursora. Następnie naciśnięto dwa klawisze na
klawiaturze. W polu <em>root</em> otrzymamy współrzędne kursa myszy
na ekranie. Natomiast przed tym polem znajdują się współrzędne
- względem okna otwartego przez polecenie <em>xev</em>
- <!-- Opisać znaczenie keykodów przy mapowaniu klawiatury -->
- </p>
- </div>
+ względem okna otwartego przez polecenie <em>xev</em>. W przypadku
+ naciśniętych na klawiszy istotną informacją zwracaną przez to
+ polecenie jest <code class="code-inline">keycode</code>, który
+ pozwoli nam na zmianę mapowania klawiatury, co może być przydatne
+ przy komputerach firmy Apple, zamieniając na ich klawiaturach
+ klawisze <em>Command</em> z <em>Option</em>. W tych klawiaturach
+ klawisz <em>Option</em> pełni rolę klawisza <em>Alt</em>, zatem
+ po zmianie mapowania, klawiatura funkcjonalnie będzie przypinać
+ każdą inną.
+ </p>
+ <p>
+ Ciekawą opcją polecenia <em>xev</em> jest
+ <code class="code-inline">-id identyfikator</code>. Pozwala ona na
+ podanie identyfikatora okna (możną go uzyskać, za pomocą polecenia
+ <code class="code-inline">xwininfo</code>), z którego polecenie
+ <code class="code-inline">xev</code> będzie odczytywać zdarzenia.
+ </p>
+ <h3 id="13.4.5.settingpreferencesandinputdataofxserver">13.4.5. Ustawianie preferencji i dane wejściowe serwera X</h3>
+ <p>
+ System wyświetlania <em>Xorg</em> oraz jego serwer zapewniają kilka
+ możliwych metod na zmianę preferencji, a niektóre z nich mogą nawet
+ nie zadziałać. Jedną ze zmian jakie możemym chceć przeprowadzić jest
+ wspomniana wcześniej zmiana mapowania, które można przeprowadzić na
+ dwa sposoby, albo zmiany są małe i wprowadzane na obecnym mapowaniu
+ przy użyciu polecenia
+ <code class="code-inline">xmodmap</code> albo utworzenie nowego
+ mapowania, skomplowania go za pomocą polecenia
+ <code class="code-inline">xkbcomp</code> oraz załadowania i
+ aktywacji przy użyciu polecenia
+ <code class="code-inline">setxkbmap</code>. Za pomocą tych poleceń
+ możemy zmieniać mapowania większości klawiszy, jak i mamy możliwość
+ definicji mapować dla każdej podłączonej klawiatury.
+ </p>
+ <p>
+ Innym ustawieniem, które możemy chceć zmienić jest kolejność klawiszy
+ przy myszy. W przypadku osób leworęcznych podstawowy przypisk (LPM,
+ dla osób praworęcznych mieści skrajnie po lewej stronie) powinien
+ znajdować sie po drugiej stronie urządzenia (skrajnie po lewej).
+ Takiej zamiany możemy dokonać z pomocą
+ <code class="code-inline">xinput</code>. Na poniższym przykładzie
+ pokazano w jaki sposób dostosować myszkę dla osób leworęcznych.
+ </p>
+<pre class="code-block">
+xf0r3m@vm-cffa62e:~$ xinput --set-button-map <em>dev</em> 3 2 1
+</pre>
+ <p>
+ Gdzie <code class="code-inline">dev</code> jest identyfikatorem
+ urządzenia. Po podaniu informacji o urządzeniu wskazujemy kolejność
+ klawiszy. Jednak skąd można wziąć taki identyfikator?
+ </p>
+ <p>
+ Aby poznać urządzenia wejsciowe podłączone do komputera z dystrybucją
+ linuksa, na której wykorzystywany jest serwer wyświetlania <em>X</em>,
+ należy użyć wyżej wymienionego polecenia
+ <code class="code-inline">xinput</code>.
+ </p>
+<pre class="code-block">
+xf0r3m@vm-cffa62e:~$ xinput
+⎡ Virtual core pointer id=2 [master pointer (3)]
+⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
+⎜ ↳ JUCHEN USB Keyboard id=11 [slave pointer (2)]
+⎜ ↳ JUCHEN USB Keyboard id=12 [slave pointer (2)]
+⎜ ↳ Logitech G502 HERO Gaming Mouse id=13 [slave pointer (2)]
+⎜ ↳ Logitech G502 HERO Gaming Mouse Keyboard id=14 [slave pointer (2)]
+⎜ ↳ AlpsPS/2 ALPS GlidePoint id=17 [slave pointer (2)]
+⎣ Virtual core keyboard id=3 [master keyboard (2)]
+ ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
+ ↳ Power Button id=6 [slave keyboard (3)]
+ ↳ Video Bus id=7 [slave keyboard (3)]
+ ↳ Power Button id=8 [slave keyboard (3)]
+ ↳ Sleep Button id=9 [slave keyboard (3)]
+ ↳ JUCHEN USB Keyboard id=10 [slave keyboard (3)]
+ ↳ Dell WMI hotkeys id=15 [slave keyboard (3)]
+ ↳ AT Translated Set 2 keyboard id=16 [slave keyboard (3)]
+ ↳ DELL Wireless hotkeys id=18 [slave keyboard (3)]
+ ↳ JUCHEN USB Keyboard id=19 [slave keyboard (3)]
+ ↳ Logitech G502 HERO Gaming Mouse Keyboard id=20 [slave keyboard (3)]
+</pre>
+ <p>
+ W przypadku mojego komputera, klawiatury posiadają identyfikatory
+ 10 lub 19 oraz 16, w przypadku myszy (wskaźnika) jest to 13 oraz 17.
+ </p>
+ <p>
+ Nie ma takiej potrzeby aby klienci mieli by nasłuchiwać zdarzeń na
+ (w tym przypadku) na trzech lub większej ilości urządzeń.
+ Wykorzystują oni natomiast pojedyncze urządzenia
+ <strong>rdzenia wirtualnego</strong>, dzięki temu możemy podłączyć
+ i korzystać z więcej niż jednej klawiatury i więcej niż jednej
+ myszy. Nie mniej jednak, klienci mogą korzystać z rozszerzenia
+ <em>X Input Extension</em> w celu skupienia nasłuchiwania na jednym
+ z nich, najczęsciej wiekszość z nich nie posiada w ogóle informacji
+ o tym rozszerzeniu.
+ </p>
+ <p>
+ Pozostałymi preferencjami to ustawienia może być tło ekranu
+ nazywane potocznie tłem pulpitu, w tym przypadku możemy skorzystać
+ z polecenia <code class="code-inline">xsetroot</code>, jednak
+ nie działa ono we wszystkich przypadkach. Lepszym rozwiązaniem może
+ być użycie zewnętrznego programu <em>feh</em>, które de facto jest
+ przeglądarką plików graficznych; czy ustawienia wygaszacza ekranu
+ lub funkcji DPMS (ang. <em>Display Power Management Signaling</em>)
+ </p>
+ <h2 id="13.5.d-busservice">13.5. Usługa D-Bus</h2>
+ <p>
+ Usługa <strong>D-Bus</strong> jest mechanizm przekazywania
+ komunikatów, umożliwia ona wymianę informacji między aplikacji
+ klienta, wykorzystując do tego komunikację między procesową. Jednak
+ aplikację wykorzystują ją do powiadamiania o zdarzeniach systemowych
+ takich jaki np. podłącznie <em>pendrive</em>-a do komputera. Proces
+ chcąc wykorzystać ją do nasłuchiwania zdarzeń muszą połączyć się
+ na początku z <strong>centralnym koncentratorem</strong> - demonem
+ <em>dbus-daemon</em> i zarejestrować w celu odbierania konkretych
+ rodzajów komunikatów. Dla przykładku inny monitor
+ <em>udisks-daemon</em> sprawdza stan systemu plików <em>udev</em>
+ pod kątem zdarzeń dyskowych i następnie wysyła je do
+ <em>dbus-daemona</em>, a on przesyła je dalej do aplikacji
+ zaintersowanych zdarzeniami tego typu.
+ </p>
+ <h3 id="13.5.1.systemandsessiond-businstance">13.5.1. Instancja systemowa oraz instancja sessji</h3>
+ <p>
+ System <em>D-Bus</em> obecnie jest jedną z ważniejszych części
+ dystrybucji
+ Linuksa - kanałami komunikacji <em>D-Bus</em> dysponuje
+ <em>systemd</em>, a ze względu na to, że jest on ściśle powiązany ze
+ środowiskiem graficznym powoduje to konflikt natury projektowej.
+ Rozwiązaniem okazało się podzielenie centralnego koncentratora na
+ dwa osobne procesy - <strong>instancję systemową</strong>, która
+ uruchamiana jest podczas rozruchu przez program typu <em>init</em>.
+ Proces ten jest uruchamiany wówczas w raz z opcją <em>--system</em> i
+ działa z uprawnieniami użytkowanika usługi D-Bus, a procesy mogą
+ łączyć się z nią za pomocą uniksowego gniazda.
+ </p>
+ <p>
+ Nie zależnie od instacji systemowej występuje
+ <strong>instancja sesji</strong> która jest uruchamiana wyłącznie
+ w momencie startu środowiska graficznego i to z nią łączą się
+ aplikacje.
+ </p>
+ <h3 id="13.5.2.d-busservicemessagesmonitoring">13.5.2. Monitorowanie komunikatów usługi D-Bus</h3>
+ <p>
+ W przypadku instancji systemowej, może dziać się nie wiele w
+ zależności od sprzętu na jakim pracujemy. Nie mniej jednak do
+ obserwacji komunikatów usługi <em>D-Bus</em> możemy wykorzystać
+ dostępne polecenie jakie <code class="code-inline">dbus-monitor</code>
+ Wybóru instancji dokonujemyu za pomocą odpowiedniej opcji:
+ instancja systemowa - <em>--system</em> oraz instancja sesji -
+ <em>--session</em>.
+ </p>
+ <p>
+ Osobiście na swoim sprzęcie za pomocą monitorowania komunikatów
+ <em>D-Bus</em> zauważyłem informacje odnośnie baterii oraz skanowania
+ sieci bezprzewodowych przez mój komputer.
+ </p>
+<pre class="code-block">
+xf0r3m@laptop-0b3697e:~$ dbus-monitor --system
+...
+signal time=1712415292.734476 sender=:1.39 -> destination=(null destination)
+serial=3626 path=/org/freedesktop/UPower/devices/battery_BAT0;
+interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
+ string "org.freedesktop.UPower.Device"
+ array [
+ dict entry(
+ string "UpdateTime"
+ variant uint64 1712415292
+ )
+ dict entry(
+ string "Voltage"
+ variant double 8.388
+ )
+ ]
+ array [
+ ]
+signal time=1712415307.335665 sender=:1.8 -> destination=(null destination)
+serial=14104 path=/org/freedesktop/NetworkManager/Devices/3;
+interface=org.freedesktop.NetworkManager.Device.Wireless; member=AccessPointAdded
+ object path "/org/freedesktop/NetworkManager/AccessPoint/794"
+signal time=1712415307.335727 sender=:1.8 -> destination=(null destination)
+serial=14105 path=/org/freedesktop/NetworkManager/Devices/3;
+interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
+ string "org.freedesktop.NetworkManager.Device.Wireless"
+ array [
+ dict entry(
+ string "AccessPoints"
+ variant array [
+ object path "/org/freedesktop/NetworkManager/AccessPoint/348"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/349"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/766"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/787"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/788"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/792"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/793"
+ object path "/org/freedesktop/NetworkManager/AccessPoint/794"
+ ]
+ )
+ ]
+ array [
+ ]
+</pre>
+ <p>
+ W przypadku instancji sesji informacji jest znacznie więcej, wystarczy
+ że zmienimy aktywne okno lub nacisniemy klawisz kontrol przy aktywnym
+ terminalu.
+ </p>
+<pre class="code-block">
+xf0r3m@laptop-0b3697e:~$ dbus-monitor --session
+...
+error time=1712415718.701034 sender=:1.119 -> destination=:1.106
+error_name=org.xfce.Xfconf.Error.PropertyNotFound reply_serial=25086
+ string "Właściwość „/shortcuts-no-menukey” nie istnieje na kanale „xfce4-terminal”"
+method call time=1712415718.925428 sender=:1.106 -> destination=:1.119
+serial=25087 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
+ string "xfce4-terminal"
+ string "/shortcuts-no-menukey"
+error time=1712415718.926183 sender=:1.119 -> destination=:1.106
+error_name=org.xfce.Xfconf.Error.PropertyNotFound reply_serial=25087
+ string "Właściwość „/shortcuts-no-menukey” nie istnieje na kanale „xfce4-terminal”"
+</pre>
+ <h2 id="13.6.printing">13.6. Drukowanie</h2>
+ <p>
+ Drukowanie dokumentów w dystrybucjach linuksa, to wieloetapowy
+ proces:
+ </p>
+ <p>
+ Program odpowiedzialny za drukowanie może przekszatałcić
+ drukowany dokument na format <em>PostScript</em>. Ten krok jest
+ opcjonalny. W przypadku braku konwersji program przesyła dokument do
+ serwera wydruku, dokument wówczas zostaje umieszczony w kolejce
+ wydruku. W momencie rozpoczęcia procesu drukowania serwer wydruku
+ przesła dokument do filtra wydruku. W przypadku gdy dokument nie ma
+ formatu <em>PostScript</em> filtr wydruku może dokonać konwersji.
+ Jeśli drukarka nie obsługuje formatu <em>PostScript</em> to przy
+ użyciu sterownika dokument zostaje skonwertowany do postacji
+ odpowiedniej dla urządzenia drukującego. Ze sterownika drukarki
+ zostają pobrane takie informacje jak źródło papieru czy ewentualny
+ dupleks - zostają one dodane do dokumentu. Na koniec serwer wydruku
+ wykorzystuje postprocesor aby wysłać dokument do drukarki.
+ </p>
+ <p>
+ Sam proces jest dość skomplikowany, ponieważ wykorzystuje się on w
+ bardzo dużym stopniu na języku programowania <em>PostScript</em>.
+ Język ten pełni rolę standardu drukowania w dystrybucjach Linuksa.
+ </p>
+ <h3 id="13.6.1.cups">13.6.1. CUPS</h3>
+ <p>
+ System wydruku w dystrybucjach jest CUPS, produkt firmy Apple, więc
+ jest on także stosowany systemach macOS. Demonem tego system jest
+ <em>cupsd</em>. W raz system drukowania mamy dostępne polecenie
+ <code class="code-inline">lpr</code>, które może pełnić rolę prostego
+ klienta pozwalającego na wysłanie plików do demona.
+ </p>
+ <p>
+ Istotną funkcją systemu CUPS jest implementacja protokołu IPP
+ (ang. Internet Print Protocol), wykorzystuje on port TCP/631 i jego
+ działanie opiera się transakcje podobne do protokołu HTTP. System
+ CUPS można konfigurować za pomocą przeglądarki łącząc się z adresem
+ <em>http://localhost:631</em>. Użytkownikiem administracyjnym jest
+ root i hasło jest takie same jak do zalogowania się na tego
+ użytkownika w systemie. Większość serwerów wydruku obsługuje
+ protokół IPP, w tym również system MS Windows. Co umożliwia nam
+ tworznie drukarek sieciowych, które nie są domyślnie sieciowe.
+ To zadanie jednak wymaga nieco ingerencji, ponieważ domyślna
+ konfiguracja nie jest zbyt bezpieczna.
+ </p>
+ <p>
+ Konfiguracja drukarek w dystrybucjach Linuksa, jeśli mówimy tu o
+ komputerze desktopowym zazwyczaj sprowadza się dodania drukarki
+ przy użyciu specjalnego apletu w sekcji ustawień dla danego
+ środowiska graficznego. Oczywiście, jak w przypadku większości
+ zwykłego sprzętu dostępnego dla ogółu problemem mogą być sterowniki
+ lub brak pliku PPD (wyjaśnienie czym jest plik PPD znajduje się
+ w podrozdziale 13.6.2). Z własnego doświadczenia wiem, że
+ z dystrybucjami Linuksa (przynajmniej z Debianem) dobrz działają
+ drukarki firmy Kyocera (dawniej Kyocera-Mita) jeśli nie działają
+ <em>plug and play</em> to zapewne dostępny jest sterownik
+ własnościowy - w przypadku tych urządzeń problemem może być koszt
+ tonera (są to urządzenia laserowe). Urządzeniem domowym, z które
+ rzadko korzystam jest Canon Pixma TR4550 działa z Debianem
+ <em>plug and play</em> dużym plusem jest tego urządzenia jest to,
+ że te tusze nie zasychają (przynajmniej oryginalne). Z racji tego
+ że to urządzenie wielofunkcyjne różnież jest możliwość skanowania
+ przez pakiet <em>Sane</em>.
+ </p>
+ <h3 id="13.6.2.conversionsandprintfilters">13.6.2. Konwersja formatów i filtry wydruku</h3>
+ <p>
+ Większość tanich drukarek nie rozpoznaje formatów <em>PostScript</em>
+ ani PDF, aby móc znich korzystać na dystrybucjach Linuksa niezbędna
+ jest konwersja formatu do tego określanego przez drukarkę.
+ </p>
+ <p>
+ System CUPS wysyła dokument do procesora RIP (ang. <em>Raster Image
+ Processor</em>), aby wygenerować bitmapę. Procesor RIP zawsze stosuje
+ program <em>Ghostscript</em> (<code class="code-inline">gs</code>) do
+ realizowanie większości zadań. Czynność jest dość skomplikowana, gdyż
+ bitmapa musi być dostowana do formatu drukarki. Sterowniki drukarki
+ używane przez CUPS sprawdzają plik <strong>PPD</strong>
+ (ang. <em>PostScript Printer Definition</em>) konkretnego urządzenia,
+ aby określić takie ustawienia jak rozmiar papieru czy rozdzielczość.
+ </p>
+ </div>
<p style="margin: 15px; padding: 0; outline: 0;">
2022; COPYLEFT; ALL RIGHTS REVERSED;
</p>