GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Führen Gui-basierte Anwendungen Shell-Befehle im Hintergrund aus?

Ich bin erst vor 2 Tagen von Windows auf Ubuntu 16.04 migriert. Mir gefällt die Art und Weise, wie wir den Unity Desktop anpassen können. Ich spiele nur mit dem Look and Feel der Desktop-Umgebung herum. Genau wie in Windows wollte ich, dass sich der Launcher am unteren Bildschirmrand befindet. Beim Googeln habe ich einen Befehl gefunden, der so lautet:

gsettings set com.canonical.Unity.Launcher launcher-position Bottom

Außerdem gibt es das Unity-Tweak-Tool und den dconf-Editor, um die Arbeit zu erledigen. Aber das ist der GUI-Ansatz, um Dinge zu erledigen.

Meine Fragen sind:

  • Führen diese GUI-basierten Anwendungen denselben Befehl auch im Hintergrund aus?
  • Wie kann man einen Blick auf die interne Funktionsweise dieser Anwendungen werfen? Ich meine, gibt es eine Möglichkeit, die Befehle zu sehen, die bei jedem Klick auf eine Schaltfläche ausgeführt werden?
  • Öffnen diese Anwendungen ein Terminal im Hintergrund und führen diese Befehle aus?

Die Antwort hier zeigt, wie Sie den Standarddateideskriptor des Prozesses erhalten. Aber ich habe nichts in der Ausgabe bekommen.

Außerdem die strace -p pid -o output.txt Befehl wirft eine riesige Menge an Text in die Datei.

Kurz gesagt, ist es dasselbe, Dinge mit GUI-Anwendungen zu tun, als Dinge von der Befehlszeile aus zu tun?

Akzeptierte Antwort:

Führen diese GUI-basierten Anwendungen denselben Befehl auch im Hintergrund aus?

Ja und nein. Sie schreiben in die dconf Datenbank mit Einstellungen, aber sie könnten dazu verschiedene Methoden verwenden. In Python geschriebene Programme verwenden wahrscheinlich gi.repository.Gio Modul (ich weiß, weil ich es oft benutze) oder sie können stattdessen gsettings verwenden als externer Befehl durch Aufrufen von subprocess.Popen(['gsettings','org.some.schema','some-key','value']) , und es wird im Grunde als Shell-Befehl ausgeführt. Ein C-Programm verwendet etwas Ähnliches, wahrscheinlich eine gio.h Bibliothek, oder es könnte sogar die exec() verwenden Familie von Funktionen, die dasselbe tun wie Popen tut in Python. Um Ihre Titelfrage zu beantworten:„Führen GUI-basierte Anwendungen Shell-Befehle im Hintergrund aus?“ Sie können, aber wahrscheinlich ist es nicht notwendig, weil es eine Bibliothek für jede Sprache gibt, in der die App geschrieben ist, und wahrscheinlich wird es etwas schneller sein, eine Bibliotheksfunktion zu verwenden, als einen neuen Prozess zu erzeugen.

Um Ihnen ein Beispiel dafür zu geben, wie es mit Bibliotheken/Modulen gemacht wird, können Sie sich gerne den Quellcode meines Launcher-Listenindikators ansehen. Dort habe ich eine Funktion geschrieben, um eine Instanz der Gio.Settings zu erstellen -Klasse und verwenden Sie sie dann, um den Unity-Launcher abhängig von der Art der Liste zu ändern, die Sie dort haben möchten.

Wie kann man einen Blick auf die interne Funktionsweise dieser Anwendungen werfen? Ich meine, gibt es eine Möglichkeit, die Befehle zu sehen, die bei jedem Klick auf eine Schaltfläche ausgeführt werden?

Nein. Wenn Sie sehen möchten, welcher Befehl in der Programmiersprache dieser App ausgegeben wird, wenn Sie eine Schaltfläche drücken oder auf Fensterelemente klicken, ist dies nicht möglich. Lesen Sie den Quellcode der Anwendung, wenn es möglich ist, ihn zu erhalten. Sie können dconf watch / verwenden um zu sehen, welche Einstellungen geändert werden, aber nicht, wie es gemacht wird.

Verwandte:Windows 8 bootet nicht über GRUB, nachdem Ubuntu mit Boot-Repair installiert wurde?

Technisch gesehen, wenn Sie wissen, wie man einen Debugger bedient, Speicheradressen liest und einige Assemblersprachen beherrscht, können Sie wissen, was eine App auf CPU- und Speicherebene tut. Dies wird als Software-Reverse-Engineering bezeichnet und wird häufig von Sicherheitsexperten verwendet, um bösartige Software zu analysieren und Schwachstellen in legitimer Software zu entdecken.

Öffnen diese Anwendungen ein Terminal im Hintergrund und führen diese Befehle aus?

Nein, es ist kein Terminal angeschlossen. Viele Programme wissen, wo die dconf Datenbank für den Benutzer befindet und dort schreiben. Es gibt auch einen Interprozess-Kommunikationsbus namens dbus , wo Programme Signale senden können und ein Programm wie „Hey, das ist eine Nachricht für mich!“

lautet

Nachtrag

  • Können Anwendungen andere Anwendungen ausführen? Ja, das geht über Standard fork() und execve() Systemaufrufe. Die Essenz der Erstellung von Prozessen unter Linux und anderen *nix-Systemen basiert größtenteils auf diesen beiden. Der Shell-Mechanismus zum Ausführen von nicht integrierten Befehlen verwendet dies insbesondere häufig. Wenn Sie interaktiv laufen

    $ ls 
    

    die Shell erstellt einen neuen Prozess über fork() , führt dieser Prozess execve() aus wodurch ls gestartet wird . Aufgrund dessen, wie execve() dieser neue gegabelte Prozess wird ls sein . Die pipe() Der Systemaufruf hilft dabei, die Ausgabe von ls zurückzulesen . Ich empfehle dringend, meine Antwort auf Was ist der Unterschied zwischen Pipe und Umleitung zu lesen, um zu verstehen, wie der Pipe-Mechanismus funktioniert – es ist nicht nur | Operator, sondern eigentlich ein Systemaufruf.

  • Können Anwendungen Shell-Befehle ausführen? Nein. Die Shell-Syntax wird nur von der Shell selbst verstanden. Was Sie jedoch tun können, ist, eine Shell mit einem Befehlszeilenbefehl -c zu starten wechseln und entsprechende Befehle bereitstellen. Dies wird häufig für benutzerdefinierte Verknüpfungen verwendet, die in GNOME oder anderen Desktop-Umgebungen festgelegt wurden, da benutzerdefinierte Verknüpfungen auf ausführbaren Dateien ausgeführt werden und es keine Shell gibt, um die Syntax zu verstehen. Als Beispiel würden Sie also bash -c 'xdotool key Ctrl+Alt+T' ausführen um xdotool indirekt auszuführen Befehl oder bash -c 'cd $HOME/Desktop; touch New_File' um eine neue Datei auf dem Desktop per Verknüpfung zu erstellen. Dies ist ein besonders interessantes Beispiel, da Sie eine Shell-Variable verwenden können, da Sie explizit eine Shell verwenden.


Ubuntu
  1. .desktop-Datei. Beim Starten der Anwendung ist ein Fehler aufgetreten?

  2. Verstehen der Jobsteuerungsbefehle in Linux – bg, fg und STRG+Z

  3. Wie lese ich den Quellcode von Shell-Befehlen?

  4. Schreiben Sie ein Shell-Skript, um ssh zu einem Remote-Computer zu senden und Befehle auszuführen

  5. Beschränken Sie den Benutzer auf die Ausführung ausgewählter Befehle (Linux)

So ändern Sie die GNOME-Shell-Schriftart

So führen Sie Shell-Befehle über einen HTTP-Server aus

Brightness Controller – Eine GUI-Anwendung zur Steuerung der Helligkeit in Ubuntu

5 Möglichkeiten zum Öffnen der Ubuntu Terminal-Anwendung

Gnome 3.2 Probleme in der Shell?

Wie kann ich die Ausgabe einer Shell-Anwendung in Linux ausblenden?