Comment désinstaller X Server et Desktop Manager sous un serveur sans tête?


88

J'utilise mon Raspberry Pi en tant que serveur sans tête sur lequel je peux me connecter. Je n'ai pas besoin du serveur X, de LXDE, etc.

Je cours Raspbian "Wheezy". J'ai déjà désactivé "Démarrer le bureau au démarrage" en utilisant la raspi-configprocédure décrite ici . Mais je continue à recevoir de nombreuses mises à jour de paquets pour tous les éléments de bureau que je n’utilise pas ( j’exploite apticron pour me prévenir par courrier électronique des mises à jour en attente). Je voudrais donc supprimerapt-get remove tous les paquets inutiles pour éviter ces mises à jour inutiles.

Quel (s) paquet (s) dois-je retirer?

Jusqu'à présent, j'ai proposé ce qui suit:

sudo apt-get remove desktop-base lightdm lxappearance lxde-common lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession-edit lxshortcut lxtask lxterminal obconf openbox raspberrypi-artwork xarchiver xinit xserver-xorg xserver-xorg-video-fbdev

J'ai fait la liste ci-dessus en cherchant dans aptitude tous les paquets de la section Paquets installés -> x11 -> qui n'étaient pas des "installations automatiques".

Pour une raison quelconque, lorsque je lance ceci, apt-getme dit que:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

ce qui semble un peu étrange pour une opération de suppression .

Y a-t-il un moyen plus facile? Existe-t-il un "super" package qui possède tout ce contenu graphique et peut être supprimé, en prenant toutes ses dépendances? À ma connaissance, cela ne semble pas possible, car ces éléments n’ont pas été installés automatiquement, ce qui signifie que je dois les localiser tous et les supprimer explicitement.

Réponses:


85

TL; DR ou "Juste brûler mon pi"

sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge

(Répétez apt-get autoremove --purgejusqu'à ce qu'il ne reste plus d'orphelin)

Plus d'explications

Si un paquet foo dépend d'un autre paquet libfoo et que vous supprimez le paquet libfoo , la personne à charge ( foo ) est également supprimée. Parce que Foo a une ligne de dépendance spécifiant libfoo , il serait cassé de laisser foo si libfoo était supprimé. L'inverse n'est pas vrai: supprimer foo ne supprime pas automatiquement libfoo . Un autre paquet xfoo peut aussi dépendre de libfoo, donc apt ne supprimera pas juste (bien que qu'apt suivre si elle a été installée que comme un effet secondaire de l' installation foo et offre de le supprimer automatiquement si vous le demandez, tant qu'aucun autre n'en dépend toujours)

Les méta-paquets dépendent d'un ensemble d'autres paquets de la même manière que foo dépend de libfoo . Ainsi, lorsque vous supprimez un méta-paquet, il ne reste généralement rien d'autre. Par exemple, il peut y avoir deux méta-packages qui dépendent de xterm (lxsession et xfsession peut-être), mais la désinstallation de l'un ou des deux ne désinstallera pas xterm car xterm n'est pas en panne sans lxsession ou xfsession. Les méta-packages sont généralement au sommet de l'arbre de dépendance, pas au bas, et peu de choses ont tendance à dépendre directement des méta-packages. Les méta-packages constituent principalement un moyen pratique d’installer simultanément un ensemble raisonnable de packages, mais ils ne sont pas des outils de désinstallation.

Donc, si vous voulez brûler tout ce qui dépend de X11, vous devez cibler le jeu de base de bibliothèques libx11 sur lequel toutes les applications x11 doivent dépendre:

sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge

(Simulera) supprimera tout ce qui dépend finalement de libx11 -. *, Ainsi que tous les paquetages installés en tant que dépendance d’un programme X11, même s’ils ne dépendent pas directement de X11 lui-même (CUPS et Ghostscript sont généralement installés comme effet secondaire de l’installation d’un environnement de bureau). La deuxième commande supprimera les orphelins suivants jusqu'à ce qu'il n'en reste plus. Supprimez "--auto-remove" si vous souhaitez effectuer cette étape ultérieurement ou si vous ne le faites pas du tout, ou rajoutez simplement les packages manuellement après le nettoyage de l'interface graphique.

Supprimez l' option --dry-run pour effectuer réellement l'opération après avoir vérifié qu'elle ne supprime pas les packages que vous n'aviez pas l'intention de supprimer.)

Je préfère nettoyer et purger les effets secondaires et les rajouter au besoin. De plus, je suis allé de l’avant et l’ai testé sur mon propre pi, puis il a redémarré sur un serveur très spartiate mais fonctionnel. :)

Pourquoi une suppression installe- t-elle quelque chose?

La stratégie ci-dessus résout le problème énoncé, mais il reste à savoir pourquoi une opération de suppression entraîne l' installation de packages .

Au cœur de chaque gestionnaire de paquets se trouve un résolveur de la satisfiabilité . Lorsque vous demandez à un gestionnaire de packages d' installer certains packages, de supprimer certains packages ou de mettre à niveau certains packages, vous lui demandez réellement de résoudre le prochain état souhaité de l'installation du logiciel en fonction d'un ensemble de packages disponible. Cette solution peut inclure l'installation de packages supplémentaires (dépendances), la suppression de packages existants (conflits, ruptures), la mise à niveau / la mise à niveau de packages spécifiques (niveau de compatibilité) ou une combinaison de ces éléments. Donc, même s’il est un peu contre-intuitif que le solutionneur détermine que certains packages doivent être installés pour que d’autres soient supprimés, c'est parfaitement logique. C'est le vilain problème de gestion des dépendances que les gestionnaires de paquets résolvent.

Un exemple concret: étant donné un ensemble d’applications Java déjà installées, elles dépendent toutes d’une exécution compatible avec Java qui se trouve être actuellement openjdk-7-jre . Vous demandez ensuite au gestionnaire de paquets de résoudre pour l'installation d'un nouvel outil Java qui déclare un conflit avec openjdk-7-jre mais qui fonctionne avec oracle-7-jre (les deux paquets fournissent généralement un runtime java-7 ). Le solveur proposera un retrait de openjdk-7-jre et une installation de oracle-java-7-jreen tant que solution à votre état souhaité, à savoir installer le nouveau package sans rompre les packages existants.

Dans ce cas particulier , xterm est un paquet qui fournit une dépendance virtuelle appelée x-terminal-emulator ( xterm , lxterminal et aterm fournit tous un émulateur x-terminal ), il est donc probable que la suppression de lxterminal (dans le cadre de en supprimant lxde), le solveur a trouvé un paquet existant ( transcode par exemple) nécessitant une sorte d’ émulateur x-terminal , il a donc choisi d’installer xterm (qui nécessite libutempter0 et xbitmaps)., expliquant les autres paquets à installer) pour satisfaire la dépendance autrement cassée. Sans voir la base de données de paquets, je suppose que c'est le scénario le plus probable.

Pour découvrir les paquets qui dépendent actuellement de xterm (ou un autre), utilisez la commande apt-cache rdepends (en utilisant le commutateur --installed pour limiter les paquets installés):

$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
    |xorg
     clusterssh
    |xinit
    |tk8.5
    |tk8.4
    |transcode

Dépendances commençant par le caractère d'alternance '|' signifie que le paquet dépend de xterm ou de quelque chose qu'il fournit (que quelque chose est x-terminal-emulator dans ce cas). Le paquetage clusterssh dépend de xterm de manière explicite , et ne permet aucune alternative. Ceci est la courte liste des paquets qui font que xterm est requis.

Qu'en est-il de deborphan?

La fonctionnalité de suivi des orphelins a été intégrée à apt-get via la fonctionnalité 'autoremove' en 2010 (bogue Debian 582791 ), rendant deborphan la plupart du temps redondant et essentiellement obsolète. Contrairement à deborphan et à d’autres solutions similaires, apt-get suit directement quels paquets ont été explicitement installés et quels paquets ont été installés en tant qu’effet secondaire ou dépendance d’un paquet explicitement installé. Par exemple, si un administrateur installe foo, libfoo est installé comme un effet secondaire et apt-get autoremove volonté , en effet, supprimer libfoo si autoremove (ou --auto-remove) est spécifié lors de la suppression foo.

L'approche adoptée par deborphan est une collection de suppositions. Par exemple, supposons qu'une bibliothèque installée sans personne dépendante soit un orphelin: si libfoo est installé, mais ni foo ni xfoo ne le sont, deborphan peut décider que ce doit être un orphelin. Un des modes d'échec est que des bibliothèques peuvent être spécifiquement installées pour les outils qu'elles fournissent (libxml2 pour xmllint avant d'être reconditionnées dans libxml2-utils) ou simplement disponibles à des fins de développement. Ces forfaits ne sont pas orphelins. En outre, deborphan se concentre sur les bibliothèques, de sorte qu’il manque un certain nombre d’ orphelins autres que des bibliothèques qui sont suivis par apt (packages obsolètes ou packages orphelins) .


2
Brilliant a travaillé pour moi merci. Il a également supprimé muninpour une raison quelconque, mais je pouvais le remettre assez facilement par la suite.
Jour

4
Brûlez-le! Je devais citer 'libx11-.*'pour empêcher la coquille de globuler.

1
@ Maxx, excellente réponse, mais dans tous vos scénarios, vous n'avez pas décrit comment il se fait que lorsqu'il a lancé le message apt-get removequ'il souhaitait install xtermet deux autres. Moi aussi j'ai expérimenté cela et je ne pouvais pas y arriver.
Madivad

2
Nettoyer, non expansées raspbian installer, après apt-get upgrade, dist-upgrade: rootfs ... 94% /. Après apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /Excellente réponse, merci beaucoup!
Daniel F

2
Et après apt-get autoremove: rootfs ... 41% /...
Daniel F

27
sudo apt-get install deborphan
sudo apt-get autoremove --purge libx11-.* lxde-.* raspberrypi-artwork xkb-data omxplayer penguinspuzzle sgml-base xml-core alsa-.* cifs-.* samba-.* fonts-.* desktop-* gnome-.*
sudo apt-get autoremove --purge $(deborphan)
sudo apt-get autoremove --purge
sudo apt-get autoclean

La première ligne est installée, deborphance qui supprimera tous les packages orphelins.

La deuxième ligne supprime les packages principaux du système X11: LXDE, Samba (partage de fichiers Windows), les polices, Gnome et d’autres éléments liés à l’environnement de bureau de Raspberry Pi.

La troisième ligne supprime les packages orphelins détectés par deborphan.

La quatrième ligne supprime tous les paquets inutiles.

La cinquième ligne efface le cache du paquet.


3
Bienvenue sur Raspberry Pi Stack Exchange! Bien que cela puisse techniquement répondre à la question, il serait préférable d'inclure une explication de la façon dont cela fonctionne et de ce qu'il fait exactement.
RPiAwesomeness

1
En exécutant ces commandes sur la toute nouvelle installation de Raspbian, je suis passé de moins d’un gigaoctet gratuit sur une carte SD de 4 Go à 2,5 Go gratuitement. Pour moi au moins c'est la bonne réponse.
Rob

2
La réponse acceptée est très détaillée, mais elle ne donne pas réellement de liste pour résoudre le problème de OP. Cette réponse est peut-être simple, mais elle remplit réellement les fonctions dont OP (et moi-même)
avons

Pourquoi désinstaller samba? Ce n'est pas une application graphique. Peut-être nécessaire pour la mise en réseau.
Dogweather

9

1/. Pour supprimer tous les ordinateurs de bureau que je viens de faire (allez faire un pot de café. Faites une promenade cela prendra un peu de temps) ...
apt-get remove --auto-remove --purge libx11-.*

2 /. Ensuite, j'ai installé deborphan pour me débarrasser des fichiers orphelins ...
sudo apt-get install deborphan

Si vous voulez voir ce qui est devenu orphelin, faites ceci ...
deborphan -sz

3 /. Ensuite, j'ai supprimé tous les fichiers orphelins ...
sudo apt-get remove --purge $(deborphan)

Pour finir, supprimez les paquets inutiles qui ne sont pas orphelins ...
sudo apt-get autoremove

Résultat final: Sans tête et propre comme un sifflet


2
apt-get remove --dry-runne fait absolument rien , mais affiche des messages à l'écran.
lenik

7

Avoir un coup d' oeil ici , mais faites défiler jusqu'à la partie sur tasksel.

Courir tasksel --list-taskssur le pi via wifi ssh me donne (après environ 30 secondes):

u desktop   Debian desktop environment
u web-server    Web server
u print-server  Print server
u database-server   SQL database
u dns-server    DNS Server
u file-server   File server
u mail-server   Mail server
u ssh-server    SSH server
u laptop    Laptop

Alors, tasksel remove desktopdevriez faire ce que vous voulez [voir commentaires] . La page de manuel est un peu brève et mystérieuse, peut-être parce que tasksel est principalement destiné aux mainteneurs Debian. Si cela fonctionne, laissez-nous savoir;)


Merci, je n'en avais jamais entendu parler tasksel, même si j'ai beaucoup d'expérience avec Ubuntu. Malheureusement, j'ai essayé cela, il a fallu un certain temps pour exécuter la remove desktopcommande mais tous ces paquets "graphiques" sont toujours là d'après aptitude.
Jour le

Je ne l’étais pas non plus, mais j’ai été un peu perturbé lorsque j’ai remarqué que le fait de retirer un composant X de base n’allait pas générer toute la pile de dépendances, ce que je pensais bien. J'ai trouvé une meilleure page pour tasksel et, en fait, lancé l'application ncurses ( taskselsans option). Bien sûr, maintenant, le «u» signifie que les méta- paquets ne sont pas installés, et si vous installez «desktop», vous obtiendrez plus que la version lxde wiki.debian.org/tasksel. Donc, pas de dés. Je remarque que le métapaquet "xorg" de apt-cache search metapackagen'est pas réellement installé non plus. Blâmer les Raspbians je suppose.
Boucle d'or

2
Je vais laisser cette réponse en place pour éviter à quelqu'un l'impasse ou au cas où quelqu'un pourrait mieux éclairer la situation.
Boucle d'or

5

Vous pouvez également essayer cette image minimale de Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/


2
Ne répond pas du tout à la question. La question était de savoir comment désinstaller X et non comment installer un nouveau système d'exploitation sans X. Cela aurait été préférable de laisser un commentaire, d'essayer de poser votre propre question ou de fournir une réponse utile pour obtenir le représentant nécessaire pour laisser un commentaire. Beau lien néanmoins.
Impuls

3

En fonction des informations de la tâche, il est possible de savoir qu’il existe un bureau de méta-paquet, qui fait référence à tous les autres packages liés à l’interface graphique. Donc juste

sudo apt-get remove task-desktop

Cela supprimera de nombreux autres packages (liés à l'interface graphique / au bureau).

Fond: le nom du paquet task-desktoppeut être trouvé en exécutant les commandes tasksel suivantes:

tasksel --list-tasks
tasksel --task-packages desktop

0

Une autre option consiste à utiliser aptitude, ce que vous devriez toujours préférer, si vous voulez faire plus que simplement installer ou supprimer quelques paquets.

Lancez aptitude en tant que root en tapant sudo aptitude. Dans la vue Packages standard d’aptitude, la dernière entrée de la liste est celle Tasksdans laquelle vous pouvez sélectionner les différentes options listées par tasksel. Naviguez à travers les éléments avec j, ket enter. Marquez un élément à purger en entrant _(trait de soulignement) sur l'élément en surbrillance. Cela ne fait que préparer des actions. Pour exécuter les actions, appuyez sur g.

Lisez à propos d' aptitude dans le manuel debian .


0

Tapez ce code:

sudo apt-get purge desktop-base lightdm lxappearance lxde-common lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession-edit lxshortcut lxtask lxterminal obconf openbox raspberrypi-artwork xarchiver xinit xserver-xorg xserver-xorg-video-fbdev

1
Donc, pour clarifier, la seule différence entre la ligne de commande du PO et la vôtre, est l'utilisation de au purgelieu de remove?
Greenonline
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.