Czy te aplikacje oparte na GUI wykonują to samo polecenie w tle?
Tak i nie. Piszą do dconf
bazy danych ustawień, ale mogą to robić na różne sposoby. Programy napisane w Pythonie prawdopodobnie będą używać gi.repository.Gio
modułu (wiem, ponieważ dużo go używam) lub mogą zamiast tego używać gsettings
jako polecenia zewnętrznego, wywołując subprocess.Popen(['gsettings','org.some.schema','some-key','value'])
, i to w zasadzie będzie działać jako polecenie powłoki. Program AC użyje czegoś podobnego, prawdopodobnie gio.h
biblioteki, lub może nawet użyć exec()
rodziny funkcji, aby zrobić to samo, co Popen
w Pythonie. Aby odpowiedzieć na twoje tytułowe pytanie: „Czy aplikacja oparta na GUI wykonuje polecenia powłoki w tle?” Mogą, ale prawdopodobnie nie jest to konieczne, ponieważ istnieje biblioteka dla dowolnego języka, w którym napisana jest aplikacja, i prawdopodobnie użycie funkcji bibliotecznej będzie nieco szybsze niż tworzenie nowego procesu.
Aby dać ci przykład, jak to jest zrobione z bibliotekami / modułami, zachęcamy do zapoznania się z kodem źródłowym wskaźnika mojej listy uruchamiania. Tam napisałem funkcję, aby utworzyć instancję Gio.Settings
klasy, a następnie użyć jej do zmodyfikowania programu uruchamiającego Unity w zależności od typu listy, którą chcesz tam mieć.
Jak zerknąć na wewnętrzne działanie tych aplikacji? Mam na myśli, czy jest jakiś sposób na spojrzenie na polecenia, które są wykonywane przy każdym kliknięciu przycisku?
Nie. Jeśli chcesz zobaczyć, które polecenie jest wydawane w języku programowania tej aplikacji, po naciśnięciu przycisku lub kliknięciu elementów okna, nie jest to możliwe. Przeczytaj kod źródłowy aplikacji, jeśli jest to możliwe. Możesz użyć, dconf watch /
aby zobaczyć, które ustawienia są zmieniane, ale nie jak to zrobić.
Technicznie, jeśli wiesz, jak obsługiwać debugger, odczytywać adresy pamięci i znasz język asemblera, możesz wiedzieć, co robi aplikacja na poziomie procesora i pamięci. Jest to znane jako inżynieria wsteczna oprogramowania i jest często wykorzystywane przez specjalistów ds. Bezpieczeństwa do analizy złośliwego oprogramowania i wykrywania luk w legalnym oprogramowaniu.
Czy te aplikacje otwierają terminal w tle i wykonują te polecenia?
Nie, nie ma podłączonego terminala. Wiele programów wie, gdzie znajduje się dconf
baza danych użytkownika i tam pisze. Istnieje również międzyprocesowa magistrala komunikacyjna znana jako dbus
, w której programy mogą wysyłać sygnały, a program będzie przypominał „Hej, to dla mnie wiadomość!”
Uzupełnienie
Czy aplikacje mogą uruchamiać inne aplikacje? Tak, odbywa się to za pomocą wywołań standardowych fork()
i execve()
systemowych. Istota tworzenia procesów w systemie Linux i innych systemach * nix jest w dużej mierze oparta na tych dwóch. Mechanizm powłoki do uruchamiania niewbudowanych poleceń bardzo często tego używa. Gdy biegniesz interaktywnie
$ ls
powłoka utworzy nowy proces za pośrednictwem fork()
, proces ten zostanie uruchomiony, execve()
który się rozpocznie ls
. Z powodu tego, jaki będzie execve()
ten nowy rozwidlony proces ls
. pipe()
Wywołanie systemowe, co pozwoli odczytać z powrotem wyjście ls
. Zdecydowanie sugeruję przeczytanie mojej odpowiedzi na pytanie Jaka jest różnica między potokiem a przekierowaniem, aby zrozumieć, jak działa mechanizm potoku - to nie tylko |
operator, ale tak naprawdę połączenie systemowe.
Czy aplikacje mogą uruchamiać polecenia powłoki? Nie. Składnia powłoki jest rozumiana tylko przez samą powłokę. Możesz jednak uruchomić powłokę za pomocą -c
przełącznika wiersza poleceń i podać odpowiednie polecenia. Jest to często używane w przypadku niestandardowych skrótów ustawianych w środowisku GNOME lub innych środowiskach komputerowych, ponieważ niestandardowe skróty działają na plikach wykonywalnych i nie ma powłoki umożliwiającej zrozumienie składni. W ten sposób na przykład zrobiłbyś bash -c 'xdotool key Ctrl+Alt+T'
pośrednio uruchomić xdotool
polecenie lub bash -c 'cd $HOME/Desktop; touch New_File'
utworzyć nowy plik na pulpicie za pomocą skrótu. Jest to szczególnie interesujący przykład, ponieważ możesz użyć zmiennej powłoki, ponieważ używasz powłoki jawnie.
Szpiegowanie tego, co się dzieje
Większość czynności wykonywanych przez te edytory ustawień można oglądać po uruchomieniu
w terminalu.
ustawienia
Również przez większość czasu, aby osiągnąć to, co dzieje się z powyższym poleceniem, aplikacje te będą musiały edytować
dconf
bazę danych (dalej poniżej). Można to zrobić albo bezpośrednio , używając opcji cli dconf (co nie jest preferowane), lub uruchamiając odpowiedniegsettings
polecenia, takie jak wspomniane.Aby uruchomić te polecenia, nie jest potrzebne okno terminala, jak widać w przykładach.
Informacje, gsettings, dconf i baza danych dconf
gsettings
to frontend cli dodconf
, który z kolei edytujedconf
bazę danych, w której przechowywana jest większość ustawień, w formacie binarnym. Zobacz także tę miłą odpowiedź .dconf
Baza danych, nawiasem mówiąc, również mogą być edytowane z GUI za pomocądconf
edytora, który jest w repozytoriach:Próbki robocze
za. W python
Aby pokazać, co dzieje się pod maską, poniżej działającej próbki, aby przełączyć pozycję programu uruchamiającego z GUI za pomocą jednego przycisku (przełączania):
file.py
uruchom go za pomocą polecenia:
...i baw się dobrze.
b. Ikona uruchamiania
Nawet prosty program uruchamiający może wykonać zadanie z GUI:
setlauncher.desktop
Do stałego użytku przechowuj w
~/.local/share/applications
(do użytku lokalnego) lub~/usr/share/applications
dla wszystkich użytkowników.źródło