]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Zakończenie pisania 13 rozdziału materiału: Linux. Podstawy. Do przeredagowania.
authorxf0r3m <jakubstasinski@protonmail.com>
Sat, 6 Apr 2024 16:34:29 +0000 (18:34 +0200)
committerxf0r3m <jakubstasinski@protonmail.com>
Sat, 6 Apr 2024 16:34:29 +0000 (18:34 +0200)
articles/terminallog/Linux.Podstawy.html

index 0c430b584bf2f44e0fc773d017fce5e7e0bf4298..96483de087aa2c5de7b40181b77cc5ed90177820 100644 (file)
@@ -10885,7 +10885,7 @@ xwininfo: Window id: 0x3400003 "Terminal - xf0r3m@vm-cffa62e: ~"
           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">
@@ -10947,10 +10947,305 @@ KeyRelease event, serial 37, synthetic NO, window 0x3800001,
           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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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>