Jak odinstalować X Server i Desktop Manager, gdy działa jako serwer bezgłowy?

88

Używam mojego Raspberry Pi jako bezgłowego serwera, do którego mogę ssh. Nie potrzebuję X Server, LXDE itp.

Używam Raspbian „wheezy”. Wyłączyłem już opcję „Uruchom pulpit przy rozruchu” przy użyciu raspi-configopisanego tutaj sposobu . Ale ciągle otrzymuję wiele aktualizacji pakietów dla wszystkich rzeczy na pulpicie, których nie używam (uruchamiam apticron, aby powiadomić mnie o oczekujących aktualizacjach za pośrednictwem poczty e-mail), więc chciałbym całkowicie apt-get removewszystkie niepotrzebne pakiety, aby uniknąć tych niepotrzebnych aktualizacji.

Które opakowania należy usunąć?

Do tej pory wymyśliłem następujące rzeczy:

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

Zrobiłem powyższą listę, szukając w aptitude wszystkich pakietów w Zainstalowanych pakietach -> x11 -> sekcji głównej, które nie były „automatycznymi instalacjami”.

Z jakiegoś powodu, kiedy to uruchamiam, apt-getmówi mi, że:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

co wydaje się trochę dziwne w przypadku operacji usuwania .

Czy istnieje prostszy sposób? Czy istnieje „super” pakiet, który posiada wszystkie te elementy graficzne i który można usunąć, biorąc pod uwagę wszystkie jego zależności? Z mojego zrozumienia, nie wygląda to na możliwe, ponieważ te rzeczy nie zostały automatycznie zainstalowane, co oznacza, że ​​muszę je wszystkie wyśledzić i usunąć je wszystkie jawnie.

Dzień
źródło

Odpowiedzi:

85

TL; DR lub „Just scorch my pi”

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

(Powtarzaj, apt-get autoremove --purgeaż nie pozostanie sierota)

Dalsze wyjaśnienia

Jeśli pakiet foo zależy od innego pakietu libfoo, a ty usuniesz pakiet libfoo , to zależne ( foo ) również zostanie usunięte. Ponieważ Foo ma linię zależną określającą libfoo , opuszczenie foo byłoby zerwane, gdyby libfoo zostało usunięte. Odwrotna sytuacja nie jest prawdą: usunięcie foo nie usuwa automatycznie libfoo . Inny pakiet xfoo może również zależeć od libfoo, więc apt nie tylko go usunie (chociaż apt będzie śledził, czy został zainstalowany tylko jako efekt uboczny instalacji foo i zaoferuj automatyczne usunięcie, jeśli o to poprosisz, o ile nikt inny nie będzie od tego zależał)

Meta-pakiety zależą od zestawu innych pakietów w bardzo podobny sposób, w jaki foo zależało od libfoo , więc kiedy usuwasz meta-pakiet, niewiele innych jest zazwyczaj usuwanych. Na przykład mogą istnieć dwa meta-pakiety zależne od xterm (być może lxsession i xfsession), ale odinstalowanie jednego lub obu nie spowoduje odinstalowania xterm, ponieważ xterm nie jest uszkodzony bez lxsession lub xfsession. Meta-paczki są zazwyczaj na górze drzewa zależności, a nie na dole, a niewiele rzeczy zwykle zależy bezpośrednio od meta-pakietów. Meta-pakiety przede wszystkim zapewniają wygodny sposób instalacji rozsądnego zestawu pakietów jednocześnie, ale nie są to narzędzia do odinstalowywania.

Tak więc, jeśli chcesz przypalić wszystko , co zależy od X11, musisz celować w podstawowy zestaw bibliotek libx11, od którego ostatecznie muszą zależeć wszystkie aplikacje x11 :

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

Spowoduje to (symulację) usunięcie wszystkiego, co ostatecznie zależy od libx11 -. *, A także usunie wszystkie pakiety, które zostały zainstalowane jako zależność programu X11, nawet jeśli nie były bezpośrednio zależne od samego X11 (zwykle instalowane są CUPS i Ghostscript jako efekt uboczny instalacji środowiska pulpitu). Drugie polecenie usunie kolejne sieroty, dopóki nie pozostaną żadne. Usuń „--auto-remove”, jeśli chcesz zrobić ten krok później lub w ogóle go nie robić, lub po prostu dodaj pakiety ręcznie po oczyszczeniu GUI.

Usuń opcję --dry-run , aby faktycznie wykonać operację po sprawdzeniu, że nie usunie ona pakietów, których nie zamierzałeś usunąć.)

Wolę oczyścić i oczyścić skutki uboczne i dodawać je w razie potrzeby. Ponadto poszedłem do przodu i przetestowałem to na mojej własnej pi, i zrestartowałem się do bardzo spartańskiego, ale funkcjonalnego serwera. :)

Dlaczego usunięcie coś instaluje ?

Powyższa strategia rozwiązuje zadany problem, ale wciąż istnieje ciekawość, dlaczego operacja usunięcia powoduje zainstalowanie pakietów .

Sercem każdego menedżera pakietów jest pewnego rodzaju solver satysfakcji . Gdy powiesz menedżerowi pakietów, aby zainstalował niektóre pakiety, usunął niektóre pakiety lub zaktualizował niektóre, naprawdę tak naprawdę prosisz o rozwiązanie kolejnego wymaganego stanu instalacji oprogramowania, biorąc pod uwagę dostępny zestaw pakietów. To rozwiązanie może obejmować instalowanie dodatkowych pakietów (zależności), usuwanie istniejących pakietów (konflikty, przerwy), obniżanie / uaktualnianie określonych pakietów (poziom zgodności) lub ich kombinację. Tak więc, choć jest to nieco sprzeczne z intuicją, solver określa, że ​​niektóre pakiety muszą zostać zainstalowane , aby inne pakiety mogły zostać usunięte, to ma sens. Jest to paskudny problem zarządzania zależnościami, który rozwiązują menedżerowie pakietów.

Konkretny przykład: Biorąc pod uwagę zestaw zainstalowanych aplikacji Java, wszystkie zależą od środowiska wykonawczego kompatybilnego z Javą, którym obecnie jest openjdk-7-jre . Następnie poprosić menedżera pakietów rozwiązania dla instalacji nowego narzędzia Java, który deklaruje konflikt z openjdk-7-jre ale pracuje z oracle-7-jre (oba pakiety rodzajowo dostarczyć do java-7-runtime ). Solver zaproponuje usunięcie z openjdk-7-jre i instalacji z Oracle Java-7-jrejako rozwiązanie dla pożądanego stanu posiadania nowego pakietu bez rozbijania istniejących pakietów.

W tym konkretnym przypadku, xterma to pakiet zawiera wirtualny zależność zwane x-końcowych Emulator ( xterma , lxterminal i aterm wszystko zapewnić o x-terminala emulator ), a więc jest prawdopodobne, że w usuwaniu lxterminal (w ramach usuwając lxde), solver znalazł istniejący zainstalowany pakiet ( transkrypt jako możliwy przykład), który wymagał pewnego rodzaju emulatora terminala x , więc solver zdecydował się zainstalować xterm (który wymaga libutempter0 i xbitmaps, wyjaśniając inne pakiety do zainstalowania), aby zaspokoić w przeciwnym razie zależność. Nie widząc bazy danych pakietów, postawiłbym hipotezę, że jest to najbardziej prawdopodobny scenariusz.

Aby odkryć pakiety, które są obecnie zależne od xterm (lub alternatywy), użyj polecenia apt-cache rdepends (używając przełącznika --installed, aby ograniczyć tylko do zainstalowanych pakietów):

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

Zależności rozpoczynające się od znaku naprzemiennego „|” oznacza, że ​​pakiet zależy od xterm lub czegoś, co zapewnia ( w tym przypadku coś jest emulatorem terminala x ). Clusterssh pakiet zależy xterm jawnie , a nie pozwala na alternatywę. Oto krótka lista pakietów, które powodują, że Xterm jest wymagany.

A co z deborphanem?

Funkcja śledzenia sierot została włączona do apt-get za pośrednictwem funkcji „autorove” w 2010 r. (Błąd Debiana 582791 ), co powoduje, że deborphan jest w większości zbędny i zasadniczo przestarzały. W przeciwieństwie do deborphan i innych podobnych rozwiązań apt-get bezpośrednio śledzi, które pakiety zostały jawnie zainstalowane, a które zostały zainstalowane jako efekt uboczny lub zależność od jawnie zainstalowanego pakietu. Na przykład, jeżeli administrator instaluje foo, libfoo jest instalowany jako efekt uboczny i apt-get autoremove woli , w rzeczywistości, usunąć libfoo jeśli autoremove (lub --auto-remove) jest określona przy usuwaniu foo.

Podejście przyjęte przez deborphan jest zbiorem domysłów. Na przykład przypuszczenie, że zainstalowana biblioteka, która nie jest zależna, musi być sierotą: Jeśli zainstalowano libfoo , ale nie są to ani foo, ani xfoo , deborphan może zdecydować, że musi być sierotą. Jednym z trybów awaryjnych jest to, że biblioteki mogą być instalowane specjalnie dla dostarczanych przez nich narzędzi (libxml2 dla xmllint przed ponownym spakowaniem do libxml2-utils) lub po prostu dostępne do celów programistycznych. Takie pakiety nie są sierotami. Ponadto deborphan koncentruje się na bibliotekach, więc pomija pewną liczbę nie-bibliotekowych sierot, które nadają się do śledzenia (pakiety przestarzałe vs. pakiety osierocone) .

Maxx Daymon
źródło
2
Genialny pracował dla mnie dzięki. Z muninjakiegoś powodu również to usunąłem, ale później mogłem to łatwo odłożyć.
Dzień
4
Spal to! Musiałem zacytować, 'libx11-.*'aby zapobiec pocieszaniu się skorupy.
1
@ Maxx, świetna odpowiedź, ale we wszystkich twoich scenariuszach nie opisałeś, jak to jest, kiedy uruchomił to apt-get remove, co chciał install xtermi dwie inne. Ja też tego doświadczyłem i nie mogłem tego rozwiązać.
Madivad
2
Czysty, nieporowate raspbian zainstalować po apt-get upgrade, dist-upgrade: rootfs ... 94% /. Po apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /Doskonała odpowiedź, wielkie dzięki!
Daniel F
2
A po apt-get autorove: 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

Instaluje się pierwszy wiersz, deborphanktóry usunie wszelkie osierocone pakiety.

Druga linia usuwa podstawowe pakiety XX systemu X11, Samby (Windows File Sharing), czcionek, Gnome i innych rzeczy związanych ze środowiskiem graficznym Raspberry Pi.

Trzecia linia usuwa wszelkie osierocone pakiety wykryte przez deborphan.

Czwarta linia usuwa niepotrzebne pakiety.

Piąta linia usuwa pamięć podręczną pakietu.

Fabio
źródło
3
Witamy w Raspberry Pi Stack Exchange! Chociaż może to technicznie odpowiedzieć na pytanie, lepiej byłoby wyjaśnić, jak to działa i co dokładnie robi.
RPiAwesomeness
1
Uruchamiając te polecenia w nowej instalacji Raspbian, przeszedłem z mniej niż gigabajta na karcie SD 4 GB do 2,5 GB za darmo. Dla mnie to przynajmniej poprawna odpowiedź.
okradać
2
Przyjęta odpowiedź jest bardzo dogłębna, ale tak naprawdę nie zawiera listy umożliwiającej rozwiązanie problemu OP. Ta odpowiedź może być prosta, ale faktycznie spełnia to, czego OP (i ja) tak naprawdę potrzebuję
portforwardpodcast
Dlaczego odinstalować sambę? To nie jest aplikacja GUI. Może być konieczne do pracy w sieci.
Dogweather,
9

1 /. Aby usunąć wszystkie pulpity, które właśnie zrobiłem (idź zrobić dzbanek kawy. Idź na spacer, to zajmie chwilę) ...
apt-get remove --auto-remove --purge libx11-.*

2 /. Potem zainstalowałem deborphan, aby pozbyć się osieroconych plików ...
sudo apt-get install deborphan

Jeśli chcesz zobaczyć, co zostało osierocone, zrób to ...
deborphan -sz

3 /. Następnie usunąłem wszystkie osierocone pliki ...
sudo apt-get remove --purge $(deborphan)

Na koniec zrób to, aby usunąć niepotrzebne pakiety, które nie są osierocone ...
sudo apt-get autoremove

Wynik końcowy: Bezgłowy i czysty jak gwizdek

James
źródło
2
apt-get remove --dry-runabsolutnie nic nie robi , ale drukuje wiadomości na ekranie.
lenik
7

Mają wygląd tutaj jednak przewinąć w dół do części o tasksel.

Uruchomienie tasksel --list-taskspi przez Wi-Fi ssh daje mi (po około 30 sekundach):

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

Więc tasksel remove desktoppowinieneś robić, co chcesz [patrz komentarze] . Strona podręcznika jest trochę krótka i tajemnicza, być może dlatego, że tasksel jest przeznaczony głównie dla opiekunów Debiana. Jeśli to zadziała, daj nam znać;)

Złotowłosa
źródło
Dzięki, nigdy nie słyszałem o tym tasksel, chociaż mam spore doświadczenie z Ubuntu. Niestety próbowałem tego, uruchomienie remove desktoppolecenia zajęło trochę czasu, ale wszystkie te „graficzne” pakiety nadal istnieją zgodnie z aptitude.
Dzień
Ja też tego nie zrobiłem, ale byłem trochę zaniepokojony, gdy zauważyłem, że zwykłe usunięcie jakiegoś podstawowego komponentu X nie pociągnęło za sobą całego stosu zależności, co - jak sądziłem - będzie. Znalazłem lepszą stronę dla tasksel i faktycznie uruchomiłem aplikację ncurses ( taskselbez opcji). Jestem całkiem pewien, że teraz „u” oznacza, że ​​metapakiety nie zainstalowane, a jeśli zainstalujesz „desktop”, dostaniesz coś więcej niż tylko wersję lxde wiki.debian.org/tasksel Więc nie ma kości. Zauważyłem, że metapakiet „xorg” z apt-cache search metapackagenie jest tak naprawdę zainstalowany. Chyba winię malin.
złotowłosa
2
Pozostawię tę odpowiedź, aby ocalić komuś ślepy zaułek lub na wypadek, gdyby ktokolwiek mógł rzucić lepsze światło.
złotowłosa
5

Alternatywnie możesz wypróbować ten minimalny obraz Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/

Aaron
źródło
2
W ogóle nie odpowiada na pytanie. Pytanie brzmiało: jak odinstalować X, a nie jak zainstalować nowy system operacyjny bez X. Najlepiej pozostawić to jako komentarz, spróbuj zadać własne pytanie lub podać użyteczną odpowiedź, aby uzyskać odpowiedź od przedstawiciela. Niezły link.
Impulss
3

Na podstawie informacji o zadaniu można dowiedzieć się, że istnieje metapakiet pulpit zadań, który odwołuje się do wszystkich innych pakietów związanych z GUI. Więc tylko

sudo apt-get remove task-desktop

Spowoduje to usunięcie wielu innych pakietów (związanych z GUI / Desktop).

Tło: nazwę pakietu task-desktopmożna znaleźć, uruchamiając następujące polecenia tasksel:

tasksel --list-tasks
tasksel --task-packages desktop
geekQ
źródło
0

Inną opcją jest użycie aptitude, którego powinieneś zawsze preferować, jeśli zamierzasz zrobić coś więcej niż tylko zainstalować lub usunąć kilka pakietów.

Uruchom aptitude jako root, pisząc sudo aptitude. W standardowym widoku Pakiety aptitude ostatnia pozycja listy, Tasksw której możesz wybrać różne opcje wymienione przez tasksel. Poruszaj się po elementach za pomocą j, ki enter. Zaznacz element, który chcesz oczyścić, wpisując _(podkreślenie) na wyróżniony element. To tylko przygotowuje działania. Aby wykonać działania, naciśnij g.

Przeczytaj o umiejętnościach w podręczniku debiana .

BdN3504
źródło
0

Wpisz ten kod:

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
źródło
1
Tak więc, aby wyjaśnić, jedyną różnicą między wierszem poleceń OP a twoim, jest użycie purgeen zamiast zamiast remove?
Greenonline,