Як видалити X Server і Desktop Manager під час запуску безголового сервера?


88

Я використовую свій Raspberry Pi як безголовий сервер, на який я можу впасти. Мені не потрібен сервер X, LXDE тощо.

Я бігаю розп’янською «хрипкою». Я вже відключив "Почати робочий стіл при завантаженні", використовуючи raspi-configописане тут . Але я продовжую отримувати багато оновлень пакунків для всіх настільних речей, які я не використовую (запускаю apticron, щоб сповіщати мене про очікування оновлень електронною поштою), тому я хотів би повністю використати apt-get removeвсі непотрібні пакети, щоб уникнути цих непотрібних оновлень.

Який пакет (и) потрібно видалити?

Поки що я придумав таке:

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

Я склав вищезазначений список, шукаючи придатність для всіх пакетів у встановлених пакетах -> x11 -> головний розділ, які не були "автоматичними встановленнями".

З якоїсь причини, коли я запускаю це, apt-getговорить мені, що:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

що здається трохи дивним для операції з видалення .

Чи є простіший спосіб? Чи є "супер" пакет, який володіє всіма цими графічними речами і його можна видалити, взявши з собою всі його залежності? З мого розуміння, це виглядає не так, як це неможливо, тому що ці речі не були встановлені автоматично, це означає, що мені потрібно відстежувати їх і видаляти їх явно.

Відповіді:


85

TL; DR або "Просто спалюй мою пі"

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

(Повторюйте, apt-get autoremove --purgeпоки не залишиться сиріт)

Подальше пояснення

Якщо пакет foo залежить від іншого пакету libfoo, а ви видалите пакет libfoo , залежний ( foo ) також буде видалений. Тому що Foo має залежить лінію , що вказує libfoo , вона буде зламана , щоб залишити Foo якщо libfoo були видалені. Зворотний бік не відповідає дійсності: видалення foo не видаляє libfoo автоматично. Інший пакет xfoo також може залежати від libfoo, тому apt не буде просто його видаляти (хоча apt буде відслідковувати, чи був він встановлений лише як побічний ефект установки foo і запропонуйте його автоматично видалити, якщо ви попросите, доки інші люди все ще не залежать від нього)

Мета-пакети залежать від набору інших пакетів приблизно так само, як і foo залежав від libfoo , тому коли ви видаляєте мета-пакет, мало що інше видаляється. Наприклад, можуть бути два метапакети, які залежать від xterm (можливо, lxsession та xfsession), але видалення одного або обох не видалить xterm, оскільки xterm не порушено без lxsession чи xfsession. Метапакети, як правило, вгорі дерева залежностей, а не внизу, і деякі речі, як правило, безпосередньо залежать від метапакетів. Метапакети в першу чергу забезпечують зручний спосіб встановлення розумного набору пакетів відразу, але вони не видаляють інструменти.

Отже, якщо ви хочете розглянути все, що залежить від X11, вам потрібно буде орієнтуватися на базовий набір бібліотек libx11, від якого в кінцевому підсумку повинні залежати всі додатки x11 :

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

Це (імітувати) видалить усе, що в кінцевому підсумку залежить від libx11 -. *, А також видалить усі пакунки, які були встановлені як залежність програми X11, навіть якщо вони безпосередньо не залежали від самого X11 (зазвичай встановлені CUPS та Ghostscript як побічний ефект установки робочого середовища). Друга команда видалить наступних сиріт, поки жодного не залишиться. Видаліть "--auto-remove", якщо ви хочете зробити цей крок пізніше або зовсім не зробити цього, або просто додайте назад пакети вручну після очищення графічного інтерфейсу.

Видаліть опцію --dry-run, щоб фактично виконати операцію після того, як ви перевірили, що вона не видалить пакунки, які ви не збиралися видаляти.)

Я вважаю за краще очищати та очищати побічні ефекти, а також додавати їх за потребою. Крім того, я пішов і випробував це на своєму пі, і він перезавантажився на дуже спартанському, але функціональному сервері. :)

Чому видалення щось встановлює ?

Вищеописана стратегія вирішує заявлену проблему, але все ще існує цікавість, чому операція видалення призводить до встановлення пакетів .

У серці кожного менеджера пакетів є здійсненність вирішувач який - то. Коли ви говорите менеджеру пакетів про встановлення деяких пакетів, видалення деяких пакетів або оновлення деяких пакетів, те, що ви насправді просите це зробити, це вирішити наступний бажаний стан встановлення програмного забезпечення з урахуванням наявного набору пакетів. Це рішення може включати встановлення додаткових пакетів (залежності), видалення існуючих пакетів (конфлікти, розриви), пониження / оновлення конкретних пакетів (рівень сумісності) або їх комбінацію. Таким чином, хоча вирішувач визначає, що деякі пакунки потрібно встановити для того, щоб інші пакети були видалені., це має ідеальний сенс. Це неприємна проблема управління залежністю, яку вирішують менеджери пакунків.

Конкретний приклад: Враховуючи набір уже встановлених програм Java, всі вони залежать від сумісного з Java -режиму виконання, який на даний момент буває openjdk-7-jre . Потім ви попросите менеджера пакунків вирішити для встановлення нового інструменту Java, який оголошує конфлікт з openjdk-7-jre, але працює з oracle-7-jre (обидва пакети загалом забезпечують виконання Java-7 ). Солвер запропонує видалення з OpenJDK-7-JRE і встановити на Oracle-Java-7-JREяк рішення бажаного стану встановлення нового пакета, не порушуючи існуючі пакунки.

У цьому конкретному випадку, Xterm є пакет , який надає віртуальну залежність званих х-термінал-емулятор ( Xterm , lxterminal і Aterm все забезпечують в й-термінальному-емуляторі ), так що цілком ймовірно , що при видаленні lxterminal (як частина видалення LXDE), вирішувач знайшов існуючий встановлений пакет ( перекодувати в якості можливого прикладу) , які вимагають який - то вид х-термінал-емулятор , тому вирішувач вибрав для установки Xterm (який вимагає libutempter0 і xbitmaps, пояснюючи інші пакунки для встановлення), щоб задовольнити інакше розбиту залежність. Не бачачи бази даних пакетів, я б припустив, що це найбільш вірогідний сценарій.

Щоб виявити пакети, які в даний час залежать від xterm (або альтернативного), використовуйте команду apt-cache rdepends (використовуючи перемикач --installed для обмеження лише встановлених пакетів):

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

Залежності, що починаються з символу чергування '|' означає, що пакет залежить від xterm або чогось, що він надає (що щось є x-terminal-emulator у цьому випадку). Пакет clusterssh прямо залежить від xterm і не дозволяє використовувати альтернативу. Це короткий список пакетів, які викликають необхідність xterm.

Що з деборфаном?

Функціональність відстеження сиріт була включена в apt-get через функцію "autoremove" в 2010 році (Debian bug 582791 ), що робить деборфаном в основному зайвим і по суті застарілим. На відміну від deborphan та інших подібних рішень, apt-get безпосередньо відстежує, які пакунки були явно встановлені та які пакунки були встановлені як побічний ефект або залежність від явно встановленого пакету. Наприклад, якщо адміністратор встановлює Foo, libfoo встановлюється в якості побічного ефекту і APT-отримати autoremove буде , насправді, видалити libfoo якщо autoremove (або --auto-видалити) задається при видаленні Foo.

Підхід деборфану - це набір здогадок. Наприклад, здогадка про те, що встановлена ​​бібліотека, яка не має залежних, повинна бути сиротою: якщо libfoo встановлений, але ні foo, ні xfoo , deborphan може вирішити, що він повинен бути сиротою. Одним з режимів відмови є те, що бібліотеки можуть бути спеціально встановлені для наданих ними інструментів (libxml2 для xmllint до того, як вона була перепакована в libxml2-utils) або просто доступні для цілей розробки. Такі пакети не є сиротами. Крім того, deborphan зосереджується на бібліотеках, тому він не вистачає ряду небібліотечних сиріт, які підходять доріжок (застарілі пакети проти осиротілих пакетів) .


2
Блискуче працював для мене спасибі. Це також було видалено muninз якоїсь причини, але я міг поставити цю спинку досить легко після цього.
День

4
Вигоріть! Мені довелося цитувати, 'libx11-.*'щоб не допустити того, що шкаралупа поглотить.

1
@Maxx, чудова відповідь, але у всіх ваших сценаріях ви не описували, як це було, коли він керував тим, apt-get removeщо хотів, install xtermта двома іншими. Я теж це пережив і не міг це розібратися.
Мадівад

2
Чистий, нерозкритий raspbian встановити, після APT-отримати оновлення, Dist-Upgrade: rootfs ... 94% /. Після apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /Відмінна відповідь, велике спасибі!
Даніель Ф

2
А після 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

Перший рядок встановлює, deborphanщо видалить усі осиротілі пакети.

Другий рядок видаляє основні пакети системи X11 LXDE, Samba (обмін файлами Windows), шрифти, Gnome та інші речі, пов'язані з робочим середовищем Raspberry Pi.

Третій рядок видаляє всі осиротілі пакунки, виявлені деборфаном.

Четвертий рядок видаляє непотрібні пакети.

П'ятий рядок очищає кеш пакету.


3
Ласкаво просимо на обмін стека Raspberry Pi! Хоча це технічно може відповісти на питання, бажано було б включити пояснення того, як це працює і що саме це робить.
RPiAwesomeness

1
Запускаючи ці команди на абсолютно новій програмі Raspbian, я перейшов від менш ніж гігабайт безкоштовно на 4 Гб SD-картці до 2,5 ГБ безкоштовно. Принаймні, це правильна відповідь.
пограбувати

2
Прийнята відповідь є дуже глибокою, але вона фактично не дає переліку для вирішення проблеми ОП. Ця відповідь може бути босоніжкою, але вона фактично виконує те, що ОП (і мені) насправді потрібно
portforwardpodcast

Навіщо видаляти самбу? Це не програма GUI. Можливо, це потрібно для створення мереж.
Dogweather

9

1 /. Щоб прибрати всі настільні комп'ютери, які я щойно зробив (піти зробити каструлю з кавою. Погуляйте, це займе певний час) ...
apt-get remove --auto-remove --purge libx11-.*

2 /. Потім я встановив deborphan, щоб позбутися осиротілих файлів ...
sudo apt-get install deborphan

Якщо ви хочете побачити, що сиріт, зробіть це ...
deborphan -sz

3 /. Потім я видалив усі осиротілі файли ...
sudo apt-get remove --purge $(deborphan)

Нарешті зробіть це, щоб видалити непотрібні пакунки, які не осиротіли ...
sudo apt-get autoremove

Остаточний результат: Без голови та чистоти, як свисток


2
apt-get remove --dry-runне робить нічого , але друкує повідомлення на екрані.
lenik

7

Є тут дивіться , але перейдіть до частини про tasksel.

Біг tasksel --list-tasksна пі через wifi ssh дає мені (приблизно через 30 секунд):

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

Отже, tasksel remove desktopслід робити те, що ви хочете [див. Коментарі] . Сторінка "man" - трохи коротка та загадкова, можливо, тому, що tasksel здебільшого призначений для підтримуючих debian. Якщо це працює, повідомте нас;)


Дякую, я ніколи не чув про це tasksel, хоча в мене є достатня кількість досвіду Ubuntu. На жаль, я спробував це, для запуску remove desktopкоманди знадобився певний час, але всі ці "графічні" пакети все ще є згідно aptitude.
День

У мене теж не було, але я був трохи обурений, коли помітив, що вдале видалення якогось основного компонента X не витягнуло весь стек залежності, що я вважав, що це буде. Я знайшов кращу сторінку для tasksel і фактично запустив додаток ncurses ( taskselбез варіантів). Досить впевнений, що зараз "u" означає, що метапакети не встановлені, і якщо ви встановите "робочий стіл", ви отримаєте більше, ніж просто lxde версія wiki.debian.org/tasksel Тож ніяких кісток. Я помічаю, що метапакет "xorg" від apt-cache search metapackageнасправді також не встановлений. Я винен, що я маю на увазі малинових.
золотинки

2
Я залишу цю відповідь, щоб врятувати когось глухий кут, або у випадку, якщо хтось зможе пролити краще світло.
золотинки

5

Крім того, ви можете спробувати це мінімальне зображення Raspbian: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/


2
Зовсім не відповідає на питання. Питання полягало в тому, як видалити X, а не як встановити нову ОС без X. Це найкраще залишити як коментар, спробуйте задати власне запитання або надати корисну відповідь, щоб отримати відповідь, необхідний, щоб залишити коментар. Приємне посилання все ж.
Імпульс

3

Виходячи з інформації про завдання, можна з’ясувати, що існує мета-пакет завдань-робочого столу, який посилається на всі інші пакети, пов'язані з графічним інтерфейсом. Так просто

sudo apt-get remove task-desktop

Це видалить безліч інших пакетів (пов'язаних з графічним інтерфейсом / робочим столом).

Передумови: назву пакета task-desktopможна знайти, виконавши такі команди команд:

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

0

Інший варіант - використовувати здатність, яку завжди слід віддати перевагу, якщо ви збираєтеся зробити більше, ніж просто встановити чи видалити кілька пакунків.

Почніть придатність як корінь, ввівши sudo aptitude. У стандартному режимі подання пакунків щодо можливості відображається остання запис Tasksу списку, в якому ви можете вибрати різні параметри, перелічені командою tasksel. Переміщення по пунктах з j, kі enter. Позначте предмет, який потрібно очистити, ввівши _(підкреслити) на виділеному елементі. Це лише готує дії. Для виконання дій натисніть g.

Про здібності читайте в посібнику з debian .


0

Введіть цей код:

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
Отже, для уточнення, єдиною різницею між командним рядком ОП та вашим є використання purgeen lieu remove?
Грінлайн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.