GNU/Linux >> Tutoriels Linux >  >> Ubuntu

L'application basée sur l'interface graphique exécute-t-elle les commandes Shell en arrière-plan ?

J'ai migré vers Ubuntu 16.04 il y a à peine 2 jours à partir de Windows. J'aime la façon dont nous pouvons personnaliser le bureau Unity. Je ne fais que jouer avec l'apparence de l'environnement de bureau. Tout comme dans Windows, je voulais que le lanceur soit en bas de l'écran. Sur Google, j'ai trouvé une commande qui ressemble à :

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

En outre, il existe l'éditeur unity-tweak-tool et dconf pour faire le travail. Mais ce sont l'approche GUI pour faire avancer les choses.

Mes questions sont :

  • Ces applications basées sur l'interface graphique exécutent-elles également la même commande en arrière-plan ?
  • Comment avoir un aperçu du fonctionnement interne de ces applications ? Je veux dire, y a-t-il un moyen de réellement regarder les commandes qui sont exécutées à chaque clic de bouton ?
  • Ces applications ouvrent-elles un terminal en arrière-plan et exécutent-elles ces commandes ?

La réponse ici indique comment obtenir le descripteur de fichier standard du processus. Mais, je n'ai rien obtenu dans la sortie.

De plus, le strace -p pid -o output.txt commande jette une énorme quantité de texte dans le fichier.

Donc, en bref, est-ce que faire des choses en utilisant des applications GUI est la même chose que faire des choses depuis la ligne de commande ?

Réponse acceptée :

Ces applications basées sur l'interface graphique exécutent-elles également la même commande en arrière-plan ?

Oui et non. Ils écrivent dans le dconf base de données de paramètres, mais ils pourraient utiliser différentes manières de le faire. Les programmes écrits en Python utiliseront probablement le gi.repository.Gio module (je sais parce que je l'utilise beaucoup) ou ils peuvent utiliser à la place gsettings en tant que commande externe en appelant subprocess.Popen(['gsettings','org.some.schema','some-key','value']) , et il fonctionnera essentiellement comme une commande shell. Un programme C utilisera quelque chose de similaire, probablement un gio.h bibliothèque, ou il pourrait même utiliser le exec() famille de fonctions pour faire la même chose que Popen fait en python. Donc, pour répondre à votre question de titre :"Est-ce que l'application basée sur l'interface graphique exécute des commandes shell en arrière-plan ?" Ils le peuvent, mais ce n'est probablement pas nécessaire car il existe une bibliothèque pour n'importe quel langage dans lequel l'application est écrite, et il sera probablement un peu plus rapide d'utiliser une fonction de bibliothèque que de générer un nouveau processus.

Pour vous donner un exemple de la façon dont cela se passe avec les bibliothèques/modules, n'hésitez pas à jeter un œil au code source de mon indicateur de liste de lanceurs. Là, j'ai écrit une fonction pour créer une instance de Gio.Settings classe puis utilisez-la pour modifier le lanceur Unity en fonction du type de liste que vous souhaitez y avoir.

Comment avoir un aperçu du fonctionnement interne de ces applications ? Je veux dire, y a-t-il un moyen de réellement regarder les commandes qui sont exécutées à chaque clic de bouton ?

Non. Si vous voulez voir quelle commande est émise dans le langage de programmation de cette application lorsque vous appuyez sur un bouton ou cliquez sur des éléments de la fenêtre, ce n'est pas possible. Lisez le code source de l'application, s'il est possible de l'obtenir. Vous pouvez utiliser dconf watch / pour voir quels paramètres sont modifiés, mais pas comment cela se fait.

Connexe :Windows 8 ne démarre pas via GRUB après l'installation d'Ubuntu avec la réparation de démarrage ?

Techniquement, si vous savez utiliser un débogueur, lire des adresses mémoire et connaître un langage d'assemblage, vous pouvez savoir ce que fait une application au niveau du processeur et de la mémoire. C'est ce qu'on appelle l'ingénierie inverse des logiciels et elle est fréquemment utilisée par les professionnels de la sécurité pour analyser les logiciels malveillants et découvrir les vulnérabilités des logiciels légitimes.

Ces applications ouvrent-elles un terminal en arrière-plan et exécutent-elles ces commandes ?

Non, il n'y a pas de terminal attaché. De nombreux programmes savent où se trouve le dconf base de données pour l'utilisateur se trouve et y écrire. Il existe également un bus de communication inter-processus appelé dbus , où les programmes peuvent envoyer des signaux, et un programme sera comme "Hé, c'est un message pour moi !"

Avenant

  • Les applications peuvent-elles exécuter d'autres applications ? Oui, cela se fait via la norme fork() et execve() appels système. L'essence de la création de processus sur Linux et d'autres systèmes * nix est largement basée sur ces deux éléments. Le mécanisme du shell pour exécuter des commandes non intégrées l'utilise beaucoup en particulier. Lorsque vous exécutez de manière interactive

    $ ls 
    

    le shell créera un nouveau processus via fork() , ce processus exécutera execve() qui commencera ls . En raison de la façon dont execve() ce nouveau processus fourchu sera ls . Le pipe() l'appel système est ce qui aidera à relire la sortie de ls . Je suggère fortement de lire ma réponse pour Quelle est la différence entre le tuyau et la redirection pour comprendre comment fonctionne le mécanisme de tuyau - ce n'est pas seulement | opérateur, mais en fait un appel système.

  • Les applications peuvent-elles exécuter des commandes shell ? Non. La syntaxe du shell n'est comprise que par le shell lui-même. Ce que vous pouvez faire, cependant, est de démarrer un shell avec une ligne de commande -c commutateur et fournir les commandes appropriées. Ceci est souvent utilisé pour les raccourcis personnalisés définis dans GNOME ou d'autres environnements de bureau, car les raccourcis personnalisés fonctionnent sur des exécutables et il n'y a pas de shell pour comprendre la syntaxe. Ainsi, à titre d'exemple, vous feriez bash -c 'xdotool key Ctrl+Alt+T' pour exécuter indirectement xdotool commande ou bash -c 'cd $HOME/Desktop; touch New_File' pour créer un nouveau fichier sur le bureau via un raccourci. Cet exemple est particulièrement intéressant car vous pouvez utiliser une variable shell, puisque vous utilisez explicitement un shell.


Ubuntu
  1. Que se passe-t-il exactement lorsque j'exécute un fichier dans le shell ?

  2. Comment démarrer le déluge en arrière-plan ?

  3. Comment exécuter des commandes dans Gnuplot à l'aide d'un script Shell ?

  4. Fichier .desktop. Une erreur s'est produite lors du lancement de l'application ?

  5. 5 façons d'exécuter des commandes UNIX / Linux (et des scripts shell) en arrière-plan

Comment changer la police du shell GNOME

Comment exécuter des commandes Shell via un serveur HTTP

Contrôleur de luminosité - Une application graphique pour contrôler la luminosité dans Ubuntu

5 façons d'ouvrir l'application Ubuntu Terminal

Gnome 3.2 Des problèmes dans le shell ?

Comment puis-je masquer la sortie d'une application shell sous Linux ?