Как удалить X Server и Desktop Manager при работе в качестве автономного сервера?

88

Я использую мой Raspberry Pi в качестве автономного сервера, на который я могу подключиться. Мне не нужен X-сервер, LXDE и т. Д.

Я использую Raspbian "Wheezy". Я уже отключил «Запуск рабочего стола при загрузке», используя, 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

Я сделал приведенный выше список, просмотрев в aptitude все пакеты в разделе Установленные пакеты -> x11 -> main, которые не были «автоматическими установками».

По какой-то причине, когда я запускаю это, 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 , но работает с оракулом-7-JRE (оба пакета в общем предоставляет в Java-7-среде выполнения ). Солвер предложит удаление из OpenJDK-7-JRE и установить на Oracle-Java-7-JREкак решение желаемого состояния установки нового пакета, не нарушая существующие пакеты.

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

Для того, чтобы открыть пакеты, которые в настоящее время в зависимости от XTerm (или альтернативный), используйте apt-кэш RDEPENDS команды (используя --installed переключателя ограничивать установленные пакеты только):

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

Зависимости, которые начинаются с символа чередования '|' означает, что пакет зависит от xterm или чего-то, что он предоставляет (что-то в данном случае является x-терминал-эмулятором ). Пакет clusterssh явно зависит от xterm и не допускает альтернативы. Это краткий список пакетов, вызывающих необходимость использования xterm.

Что насчет деборфана?

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

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

Maxx Daymon
источник
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% /...
Даниэль Ф
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 File Sharing), шрифты, Gnome и другие вещи, связанные с окружением рабочего стола Raspberry Pi.

Третья строка удаляет все потерянные пакеты, обнаруженные deborphan.

Четвертая строка удаляет все ненужные пакеты.

Пятая строка очищает кеш пакета.

Fabio
источник
3
Добро пожаловать в Raspberry Pi Stack Exchange! Хотя технически это может дать ответ на вопрос, было бы предпочтительно включить некоторые объяснения того, как это работает и что именно оно делает.
RPiAwesomeness
1
Выполняя эти команды при новой установке Raspbian, я перешел с менее чем гигабайта на SD-карте 4 ГБ до 2,5 ГБ бесплатно. По крайней мере, для меня это правильный ответ.
ограбить
2
Принятый ответ очень глубокий, но на самом деле он не дает списка для решения проблемы ОП. Этот ответ может быть скромным, но на самом деле он выполняет то, что действительно нужно OP (и мне)
portforwardpodcast
Зачем удалять самбу? Это не приложение с графическим интерфейсом. Может быть необходимо для общения.
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

Основываясь на информации о tasksel, можно выяснить, что существует рабочий стол метапакета, который ссылается на все другие пакеты, связанные с GUI. Так просто

sudo apt-get remove task-desktop

Это удалит множество других пакетов (связанных с GUI / Desktop).

Справочная информация: имя пакета task-desktopможно найти, выполнив следующие команды tasksel:

tasksel --list-tasks
tasksel --task-packages desktop
geekQ
источник
0

Другой вариант - использовать aptitude, который вы всегда должны предпочитать, если вы собираетесь делать больше, чем просто устанавливать или удалять несколько пакетов.

Начало способности как корень, набрав sudo aptitude. В стандартном представлении пакетов aptitude последняя запись списка, Tasksв которой вы можете выбрать различные опции, перечисленные tasksel. Перемещение по пунктам с j, kи enter. Отметьте объект, который необходимо очистить, введя _(подчеркивание) на выделенном элементе. Это только готовит действия. Для выполнения действий нажмите g.

Прочтите об aptitude в руководстве к Debian .

BdN3504
источник
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
Raspbian
источник
1
Итак, чтобы уточнить, единственная разница между командной строкой OP и вашей, является использование purgeвместо remove?
Greenonline