Wie deinstalliere ich X Server und Desktop Manager, wenn ich als Headless-Server arbeite?

88

Ich verwende meinen Raspberry Pi als Headless- Server, in den ich sshen kann. Ich brauche keinen X Server, LXDE etc.

Ich lasse Raspbian "keuchen". Ich habe "Desktop beim Booten starten" bereits raspi-configwie hier beschrieben deaktiviert . Aber ich bekomme immer wieder viele Paketaktualisierungen für all die Desktop- Inhalte , die ich nicht verwende (ich verwende apticron , um mich über ausstehende Aktualisierungen per E-Mail zu benachrichtigen), daher möchte ich apt-get removealle unnötigen Pakete vollständig entfernen , um diese unnötigen Aktualisierungen zu vermeiden.

Welche Pakete soll ich entfernen?

Bisher habe ich mir Folgendes ausgedacht:

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

Ich habe die obige Liste erstellt, indem ich in Eignung nach allen Paketen im Abschnitt Installierte Pakete -> x11 -> Main gesucht habe, bei denen es sich nicht um "automatische Installationen" handelte.

Wenn ich dies aus irgendeinem Grund ausführe, apt-getwird mir Folgendes mitgeteilt:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

Das scheint ein wenig seltsam für eine Operation zum Entfernen .

Gibt es einen einfacheren Weg? Gibt es ein "Super" -Paket, das all diese grafischen Elemente enthält und entfernt werden kann, wobei alle Abhängigkeiten berücksichtigt werden? Nach meinem Verständnis sieht es nicht so aus, als ob dies möglich wäre, da diese Dinge nicht automatisch installiert wurden, was bedeutet, dass ich sie alle aufspüren und sie alle explizit entfernen muss.

Tag
quelle

Antworten:

85

TL; DR oder "Verbrenne einfach mein Pi"

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

(Wiederholen, apt-get autoremove --purgebis keine Waisenkinder mehr da sind)

Weitere Erklärung

Wenn ein Paket foo hängt auf einem anderen Paket libfoo und Sie entfernen die libfoo Paket, das abhängig ( foo ) wird ebenfalls entfernt. Da Foo eine abhängige Zeile hat, die libfoo angibt , wäre es fehlerhaft , foo zu verlassen, wenn libfoo entfernt würde. Das Gegenteil ist nicht wahr: Entfernen foo nicht löschen libfoo automatisch. Ein anderes Paket xfoo kann auch von libfoo abhängen, sodass apt es nicht einfach entfernt (obwohl apt nachverfolgt, ob es nur als Nebeneffekt der Installation von foo installiert wurde) und bieten an, es automatisch zu entfernen, wenn Sie danach fragen, solange keine anderen noch davon abhängig sind.)

Metapakete hängen von einer Reihe anderer Pakete auf die gleiche Weise ab wie foo von libfoo . Wenn Sie also ein Metapaket entfernen, wird in der Regel nur wenig anderes entfernt. Zum Beispiel kann es zwei Metapakete geben , die von xterm abhängen (lxsession und xfsession vielleicht), aber die Deinstallation von einem oder beiden führt nicht zur Deinstallation von xterm, da xterm ohne lxsession oder xfsession nicht kaputt geht. Metapakete befinden sich im Allgemeinen am oberen Rand des Abhängigkeitsbaums und nicht am unteren Rand, und nur wenige Dinge hängen in der Regel direkt von Metapaketen ab. Metapakete bieten in erster Linie eine bequeme Möglichkeit, eine sinnvolle Gruppe von Paketen gleichzeitig zu installieren, sie sind jedoch keine Deinstallationstools.

Wenn Sie also alles scorchen möchten, was von X11 abhängt, müssen Sie den Basissatz an libx11-Bibliotheken auswählen, von dem letztendlich alle x11-Apps abhängen müssen :

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

Dies (simuliert) entfernt alles, was letztendlich von libx11 -. * Abhängt, und entfernt auch alle Pakete, die als Abhängigkeit von einem X11-Programm installiert wurden, selbst wenn sie nicht direkt von X11 selbst abhängen (CUPS und Ghostscript werden normalerweise installiert) als Nebeneffekt der Installation einer Desktop-Umgebung). Der zweite Befehl entfernt nachfolgende Waisenkinder, bis keine mehr übrig sind. Entfernen Sie "--auto-remove", wenn Sie diesen Schritt später ausführen möchten oder wenn Sie ihn gar nicht ausführen möchten, oder fügen Sie die Pakete einfach manuell wieder hinzu, nachdem Sie die GUI entfernt haben.

Entfernen Sie die Option --dry-run , um den Vorgang tatsächlich auszuführen, nachdem Sie überprüft haben, dass keine Pakete entfernt werden, die nicht entfernt werden sollen.)

Ich bevorzuge es, die Nebenwirkungen zu reinigen und zu beseitigen und sie nach Bedarf wieder hinzuzufügen. Außerdem habe ich dies auf meinem eigenen Pi getestet und es wurde auf einem sehr spartanischen, aber funktionierenden Server neu gestartet. :)

Warum installiert ein Remove etwas?

Die obige Strategie löst das angegebene Problem, aber es besteht immer noch die Neugier, warum ein Entfernungsvorgang dazu führt, dass Pakete installiert werden .

Das Herzstück eines jeden Paketmanagers ist eine Art Erfüllbarkeitslöser . Wenn Sie einen Paketmanager anweisen, einige Pakete zu installieren , zu entfernen oder zu aktualisieren , müssen Sie wirklich den nächsten gewünschten Status der Softwareinstallation ermitteln, wenn ein Satz verfügbarer Pakete vorhanden ist. Diese Lösung kann das Installieren zusätzlicher Pakete (Abhängigkeiten), das Entfernen vorhandener Pakete (Konflikte, Unterbrechungen), das Herunterstufen / Aktualisieren bestimmter Pakete (Kompatibilitätsstufe) oder eine Kombination davon umfassen. Obwohl es ein bisschen unerklärlich ist, dass der Solver feststellt, dass einige Pakete installiert werden müssen, damit andere Pakete entfernt werden könnenEs macht vollkommen Sinn. Dies ist das schlimme Abhängigkeitsverwaltungsproblem, das Paketverwalter lösen.

Ein konkretes Beispiel: Bei einer Reihe bereits installierter Java-Anwendungen hängen alle von einer Java-kompatiblen Laufzeit ab, die derzeit openjdk-7-jre ist . Sie fragen dann den Paket - Manager für die Installation eines neuen Java - Tool zu lösen , die einen erklärt Konflikt mit openjdk-7-jre sondern arbeiten mit Oracle-7-jre (beiden Pakete allgemein bieten eine Java-7-Laufzeit ). Der Solver eine vorzuschlagen Entfernung von openjdk-7-jre und eine Installation von dem Oracle-java-7-jreals Lösung für Ihren Wunschzustand, das neue Paket installiert zu haben, ohne vorhandene Pakete zu beschädigen.

In diesem speziellen Fall ist xterm ein Paket, das eine virtuelle Abhängigkeit namens x-terminal- emulator bereitstellt ( xterm , lxterminal und aterm stellen alle einen x-terminal- emulator bereit). Daher ist es wahrscheinlich, dass lxterminal (als Teil von) entfernt wird Beim Entfernen von lxde) hat der Solver ein vorhandenes installiertes Paket gefunden ( Transcode als mögliches Beispiel), für das eine Art X-Terminal-Emulator erforderlich ist. Daher hat sich der Solver für die Installation von xterm entschieden (für das libutempter0 und xbitmaps erforderlich sind )(Erklären der anderen zu installierenden Pakete), um die ansonsten unterbrochene Abhängigkeit zu erfüllen. Ohne die Paketdatenbank zu sehen, würde ich annehmen, dass dies das wahrscheinlichste Szenario ist.

Verwenden Sie den Befehl apt-cache rdepends (mit der Option --installed können Sie nur installierte Pakete angeben ), um die derzeit von xterm (oder einer Alternative) abhängigen Pakete zu ermitteln:

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

Abhängigkeiten, die mit dem Wechselzeichen '|' beginnen Bedeutet, dass das Paket von xterm oder etwas anderem abhängt ( in diesem Fall handelt es sich um einen x-terminal-Emulator ). Das Paket clusterssh ist explizit von xterm abhängig und lässt keine Alternative zu. Dies ist die kurze Liste der Pakete, die dazu führen, dass xterm benötigt wird.

Was ist mit Deborphan?

Die Funktionalität des Verfolgens von Waisen wurde 2010 über die 'Autoremove'-Funktionalität (Debian-Bug 582791 ) in apt-get integriert, wodurch Deborphan größtenteils überflüssig und im Wesentlichen veraltet wurde. Im Gegensatz zu Deborphan und ähnlichen Lösungen verfolgt apt-get direkt , welche Pakete explizit installiert wurden und welche Pakete als Nebeneffekt oder Abhängigkeit eines explizit installierten Pakets installiert wurden. Zum Beispiel, wenn ein Administrator foo installiert, libfoo wird als installierte Nebeneffekt und apt-get autoremove Willen , in der Tat, libfoo entfernen , wenn autoremove (oder --auto-remove) angegeben wird , wenn foo entfernen.

Der Ansatz von Deborphan ist eine Ansammlung von Vermutungen. Beispiel: Die Annahme , dass eine installierte Bibliothek, für die es keine abhängige Bibliothek gibt, verwaist sein muss: Wenn libfoo installiert ist, aber weder foo noch xfoo , entscheidet deborphan möglicherweise, dass es sich um eine verwaiste Bibliothek handelt. Ein Fehlermodus besteht darin, dass Bibliotheken speziell für die von ihnen bereitgestellten Tools installiert werden (libxml2 für xmllint, bevor es in libxml2-utils neu gepackt wurde) oder einfach für Entwicklungszwecke verfügbar sind. Solche Pakete sind keine Waisen. Darüber hinaus konzentriert sich deborphan auf Bibliotheken, sodass eine Reihe von nicht bibliotheksbezogenen Waisen übersehen werden, die nachverfolgen können (veraltete Pakete im Vergleich zu verwaisten Paketen) .

Maxx Daymon
quelle
2
Brilliant hat für mich gearbeitet, danke. Es hat sich muninaus irgendeinem Grund auch entfernt, aber ich konnte es später leicht genug zurücksetzen.
Tag
4
Verbrenne es! Ich musste zitieren 'libx11-.*', um zu verhindern, dass die Muschel platzt.
1
@Maxx, tolle Antwort, aber in all deinen Szenarien hast du nicht beschrieben, wie es ist, als er das lief apt-get remove, was es wollte, install xtermund zwei andere. Auch ich habe das erlebt und konnte es nicht herausfinden.
Madivad
2
Sauber, nicht expandierten raspbian installieren, nach dem apt-get upgrade, dist-upgrade: rootfs ... 94% /. Nach apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /Ausgezeichnete Antwort, vielen Dank!
Daniel F
2
Und nach 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

Die erste Zeile installiert, deborphandie alle verwaisten Pakete entfernt.

Die zweite Zeile entfernt die Kernpakete des X11-Systems LXDE, Samba (Windows File Sharing), Schriftarten, Gnome und andere Dinge, die mit der Desktop-Umgebung von Raspberry Pi zusammenhängen.

Die dritte Zeile entfernt alle verwaisten Pakete, die von deborphan erkannt wurden.

Die vierte Zeile entfernt alle nicht benötigten Pakete.

Die fünfte Zeile löscht den Paket-Cache.

Fabio
quelle
3
Willkommen bei Raspberry Pi Stack Exchange! Dies mag zwar die Frage technisch beantworten, es wäre jedoch vorzuziehen, eine Erklärung darüber beizufügen, wie dies funktioniert und was es genau tut.
RPiAwesomeness
1
Wenn ich diese Befehle bei einer brandneuen Raspbian-Installation ausführe, bin ich von weniger als einem Gigabyte auf einer 4-GB-SD-Karte auf 2,5 GB umgestiegen. Für mich ist das zumindest die richtige Antwort.
Rob
2
Die akzeptierte Antwort ist sehr ausführlich, enthält jedoch keine Liste zur Lösung des OP-Problems. Diese Antwort mag barebones sein, aber sie erfüllt tatsächlich das, was OP (und ich) tatsächlich brauchen
portforwardpodcast
Warum Samba deinstallieren? Dies ist keine GUI-Anwendung. Könnte für die Vernetzung notwendig sein.
Dogweather
9

1 /. Um alle Desktops zu entfernen, die ich gerade gemacht habe (mach eine Kanne Kaffee. Machen Sie einen Spaziergang, das wird eine Weile dauern) ...
apt-get remove --auto-remove --purge libx11-.*

2 /. Dann habe ich deborphan installiert, um verwaiste Dateien loszuwerden ...
sudo apt-get install deborphan

Wenn Sie sehen möchten, was verwaist ist, tun Sie dies ...
deborphan -sz

3/. Dann habe ich alle verwaisten Dateien entfernt ...
sudo apt-get remove --purge $(deborphan)

Führen Sie dies zum Schluss aus, um nicht benötigte Pakete zu entfernen, die nicht verwaist sind ...
sudo apt-get autoremove

Endergebnis: Headless und sauber wie eine Pfeife

James
quelle
2
apt-get remove --dry-runtut absolut nichts , sondern druckt Nachrichten auf dem Bildschirm.
Lenik
7

Haben Sie einen Blick hier aber nach unten scrollen , zum Teil über tasksel.

Das Laufen tasksel --list-tasksauf dem Pi via WLAN gibt mir (nach ca. 30 Sekunden):

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

Also tasksel remove desktopsolltest du tun, was du willst [siehe Kommentare] . Die Manpage ist etwas kurz und mysteriös, vielleicht weil tasksel hauptsächlich für Debian-Betreuer gedacht ist. Wenn das klappt lass es uns wissen;)

Goldlöckchen
quelle
Vielen Dank, von dem ich noch nie gehört hatte tasksel, obwohl ich ziemlich viel Ubuntu-Erfahrung habe. Leider habe ich das versucht, es hat eine Weile gedauert, bis der remove desktopBefehl ausgeführt wurde, aber all diese "grafischen" Pakete sind laut noch da aptitude.
Tag
Ich hatte es auch nicht, aber ich war etwas verstört, als ich bemerkte, dass das Entfernen einer einfachen X-Komponente nicht den gesamten Abhängigkeitsstapel abriss, was ich dachte. Ich habe eine bessere Seite für tasksel gefunden und tatsächlich die ncurses-App gestartet ( taskselohne Optionen). Ich bin mir ziemlich sicher, dass das 'u' bedeutet, dass die Metapakete nicht installiert sind. Wenn Sie 'desktop' installieren, erhalten Sie mehr als nur die lxde-Version. Wiki.debian.org/tasksel Also keine Würfel. Ich stelle fest, dass das Metapaket "xorg" von auch apt-cache search metapackagenicht installiert ist. Ich schätze, wir geben den Himbeeren die Schuld.
Goldlöckchen
2
Ich überlasse diese Antwort, um jemandem eine Sackgasse zu ersparen oder falls jemand besseres Licht ins Dunkel bringen kann.
Goldlöckchen
5

Alternativ können Sie dieses Raspbian-Minimalbild ausprobieren: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/

Aaron
quelle
2
Beantwortet die Frage überhaupt nicht. Die Frage war, wie man X deinstalliert und nicht wie man ein neues Betriebssystem ohne X installiert. Dies sollte man am besten als Kommentar hinterlassen, indem man versucht, eine eigene Frage zu stellen oder eine nützliche Antwort zu geben, um den Repräsentanten zu finden, der zum Hinterlassen eines Kommentars benötigt wird. Netter Link trotzdem.
Impulss
3

Anhand der Tasksel-Informationen kann festgestellt werden, dass es einen Metapaket-Taskdesktop gibt, der auf alle anderen GUI-bezogenen Pakete verweist. Also nur

sudo apt-get remove task-desktop

Dadurch werden viele andere Pakete (im Zusammenhang mit GUI / Desktop) entfernt.

Hintergrund: Der Name des Pakets task-desktopkann durch Ausführen der folgenden Tasksel-Befehle ermittelt werden:

tasksel --list-tasks
tasksel --task-packages desktop
geekQ
quelle
0

Eine andere Möglichkeit ist die Verwendung von aptitude, die Sie immer bevorzugen sollten, wenn Sie mehr als nur ein paar Pakete installieren oder entfernen möchten.

Starten Sie aptitude als root, indem Sie Folgendes eingeben sudo aptitude. In der Standard-Paketansicht von aptitude befindet sich der letzte Listeneintrag, Tasksin dem Sie die verschiedenen Optionen auswählen können, die von tasksel aufgelistet werden. Navigieren Sie durch die Elemente mit j, kund enter. Markieren Sie einen zu löschenden Artikel, indem Sie _den markierten Artikel mit einem Unterstrich versehen. Dies bereitet nur Aktionen vor. Um die Aktionen auszuführen, drücken Sie g.

Lesen Sie über Eignung im Debian-Handbuch .

BdN3504
quelle
0

Geben Sie diesen Code ein:

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
Raspbian
quelle
1
Der einzige Unterschied zwischen der Befehlszeile des OP und Ihrer ist also die Verwendung von purgeanstelle von remove?
Greenonline