Làm cách nào để gỡ cài đặt X Server và Desktop Manager khi chạy như máy chủ không đầu?


88

Tôi đang sử dụng Raspberry Pi của mình như một máy chủ không đầu mà tôi có thể ssh vào. Tôi không cần X Server, LXDE, v.v.

Tôi đang chạy Raspbian "khò khè". Tôi đã tắt "Khởi động máy tính để bàn khi khởi động" bằng cách sử dụng raspi-confignhư được mô tả ở đây . Nhưng tôi vẫn nhận được rất nhiều bản cập nhật gói cho tất cả những thứ máy tính để bàn mà tôi không sử dụng (tôi chạy apticron để thông báo cho tôi về các bản cập nhật đang chờ xử lý qua email), vì vậy tôi muốn hoàn toàn apt-get removetất cả các gói không cần thiết để tránh những cập nhật không cần thiết này.

Tôi nên gỡ bỏ gói nào?

Cho đến nay, tôi đã đưa ra những điều sau đây:

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

Tôi đã tạo danh sách trên bằng cách tìm kiếm khả năng cho tất cả các gói trong Gói đã cài đặt -> x11 -> phần chính không phải là "cài đặt tự động".

Vì một số lý do khi tôi chạy nó, apt-getnói với tôi rằng:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

có vẻ hơi kỳ lạ cho một hoạt động loại bỏ .

Có cách nào dễ hơn không? Có một gói "siêu" sở hữu tất cả các công cụ đồ họa này và có thể được gỡ bỏ, mang theo tất cả các phụ thuộc của nó với nó không? Theo hiểu biết của tôi, có vẻ như điều này là không thể, bởi vì những thứ này chưa được cài đặt tự động, nghĩa là tôi cần theo dõi tất cả chúng và loại bỏ tất cả chúng một cách rõ ràng.

Câu trả lời:


85

TL; DR hoặc "Chỉ cần thiêu đốt pi của tôi"

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

(Lặp lại apt-get autoremove --purgecho đến khi không còn trẻ mồ côi)

Giải thích thêm

Nếu một gói foo phụ thuộc vào gói libfoo khác và bạn loại bỏ gói libfoo , thì phụ thuộc ( foo ) cũng bị xóa. Bởi vì Foo có một dòng phụ thuộc chỉ định libfoo , nó sẽ bị phá vỡ để rời khỏi foo nếu libfoo bị xóa. Điều ngược lại là không đúng: xóa foo không tự động xóa libfoo . Một gói xfoo thể cũng phụ thuộc vào libfoo, vì vậy apt sẽ không chỉ loại bỏ nó (mặc dù apt sẽ theo dõi nếu nó đã được cài đặt chỉ là một tác dụng phụ của việc cài đặt foo và đề nghị tự động xóa nó nếu bạn yêu cầu, miễn là không còn ai khác phụ thuộc vào nó)

Các gói meta phụ thuộc vào một tập hợp các gói khác theo cách tương tự như foo phụ thuộc vào libfoo , vì vậy khi bạn xóa gói meta, thông thường sẽ bị loại bỏ. Ví dụ: có thể có hai gói meta phụ thuộc vào xterm (có thể là lxsession và xfsession), nhưng gỡ cài đặt một hoặc cả hai sẽ không gỡ cài đặt xterm vì xterm không bị hỏng nếu không có lxsession hoặc xfsession. Các gói meta thường nằm ở đầu cây phụ thuộc, không phải ở dưới cùng và một vài thứ có xu hướng phụ thuộc trực tiếp vào các gói meta. Các gói meta chủ yếu cung cấp một cách thuận tiện để cài đặt một bộ gói hợp lý cùng một lúc, nhưng chúng không gỡ bỏ các công cụ.

Vì vậy, nếu bạn muốn ghi lại mọi thứ phụ thuộc vào X11, bạn sẽ cần nhắm mục tiêu vào bộ thư viện libx11 cơ bản mà tất cả các ứng dụng x11 cuối cùng phải phụ thuộc vào:

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

Điều này sẽ (mô phỏng) loại bỏ mọi thứ cuối cùng phụ thuộc vào libx11 -. *, Và cũng sẽ xóa bất kỳ gói nào được cài đặt dưới dạng phụ thuộc của chương trình X11 ngay cả khi chúng không phụ thuộc trực tiếp vào chính X11 (CUPS và Ghostscript thường được cài đặt như một tác dụng phụ của việc cài đặt một môi trường máy tính để bàn). Lệnh thứ hai sẽ loại bỏ những đứa trẻ mồ côi tiếp theo cho đến khi không còn lại. Xóa "--auto-remove" nếu bạn muốn thực hiện bước này sau hoặc hoàn toàn không thực hiện hoặc chỉ thêm lại các gói theo cách thủ công sau khi tắt GUI.

Xóa tùy chọn --dry-run để thực sự thực hiện thao tác sau khi bạn đã kiểm tra xem nó sẽ không xóa các gói bạn không có ý định xóa.)

Tôi thích làm sạch và thanh lọc các tác dụng phụ, và thêm chúng trở lại khi cần thiết. Ngoài ra, tôi đã đi trước và thử nghiệm điều này trên pi của riêng tôi, và nó đã khởi động lại vào một máy chủ rất spartan nhưng chức năng. :)

Tại sao một gỡ bỏ cài đặt một cái gì đó?

Chiến lược trên giải quyết vấn đề đã nêu, nhưng vẫn có sự tò mò về lý do tại sao một thao tác loại bỏ dẫn đến các gói được cài đặt .

Trọng tâm của mỗi người quản lý gói là một người giải quyết thỏa đáng của một số loại. Khi bạn yêu cầu người quản lý gói cài đặt một số gói, xóa một số gói hoặc nâng cấp một số gói, điều bạn thực sự yêu cầu là giải quyết tình trạng cài đặt phần mềm mong muốn tiếp theo với một bộ gói có sẵn. Giải pháp này có thể bao gồm cài đặt các gói bổ sung (phụ thuộc), loại bỏ các gói hiện có (xung đột, phá vỡ), hạ cấp / nâng cấp các gói cụ thể (mức độ tương thích) hoặc kết hợp chúng. Vì vậy, mặc dù hơi phản cảm khi người giải quyết xác định rằng một số gói cần được cài đặt để các gói khác bị xóa, nó làm cho ý nghĩa hoàn hảo. Đây là vấn đề quản lý phụ thuộc khó chịu mà các nhà quản lý gói giải quyết.

Một ví dụ cụ thể: Cho một tập hợp các ứng dụng Java đã được cài đặt, tất cả chúng đều phụ thuộc vào thời gian chạy tương thích java mà hiện đang xảy ra là openjdk-7-jre . Sau đó bạn có yêu cầu quản lý gói để giải quyết cho việc cài đặt của một công cụ Java mới mà tuyên bố một cuộc xung đột với openjdk-7-jre nhưng làm việc với oracle-7-jre (cả gói quát cung cấp một java-7-runtime ). Bộ giải sẽ đề xuất một loại bỏ của openjdk-7-jrecài đặt của oracle-java-7-jrelà giải pháp cho trạng thái mong muốn của bạn khi cài đặt gói mới trong khi không phá vỡ các gói hiện có.

Trong trường hợp cụ thể này, xterm là gói cung cấp một phụ thuộc ảo được gọi là x-terminal-giả lập ( xterm , lxterminalaterm đều cung cấp một trình giả lập x-terminal ), do đó có khả năng loại bỏ lxterminal (như một phần của loại bỏ lxde), bộ giải tìm thấy một gói đã cài đặt hiện có ( chuyển mã như một ví dụ có thể) yêu cầu một số loại trình giả lập x-terminal , vì vậy bộ giải đã chọn cài đặt xterm (yêu cầu libutempter0xbitmaps, giải thích các gói khác để cài đặt) để đáp ứng sự phụ thuộc bị hỏng. Nếu không thấy cơ sở dữ liệu gói, tôi sẽ đưa ra giả thuyết rằng đây là tình huống có thể xảy ra nhất.

Để khám phá các gói hiện đang phụ thuộc vào xterm (hoặc thay thế), sử dụng apt-cache rdepends lệnh (sử dụng --installed tắc để hạn chế các gói cài đặt duy nhất):

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

Các phụ thuộc bắt đầu bằng ký tự xen kẽ '|' có nghĩa là gói phụ thuộc vào xterm hoặc thứ gì đó mà nó cung cấp (cái gì đó là trình giả lập x-terminal trong trường hợp này). Các clusterssh gói phụ thuộc vào xterm một cách rõ ràng , và không cho phép một sự thay thế. Đây là danh sách ngắn của các gói gây xterm được yêu cầu.

Điều gì về deborphan?

Chức năng theo dõi trẻ mồ côi đã được tích hợp vào apt-get thông qua chức năng 'autoremove' trong năm 2010 (lỗi Debian 582791 ) khiến cho trình biến hình chủ yếu là dư thừa và về cơ bản là lỗi thời. Không giống như deborphan và các giải pháp khác giống như vậy, apt-get trực tiếp theo dõi các gói nào được cài đặt rõ ràng và gói nào được cài đặt dưới dạng tác dụng phụ hoặc phụ thuộc của gói được cài đặt rõ ràng. Ví dụ, nếu một quản trị viên cài đặt foo, libfoo được cài đặt như là một tác dụng phụ và apt-get autoremove ý chí , trên thực tế, loại bỏ libfoo nếu autoremove (hoặc --auto-remove) được xác định khi loại bỏ foo.

Cách tiếp cận được thực hiện bởi deborphan là một tập hợp các phỏng đoán. Ví dụ: đoán rằng một thư viện đã cài đặt không có người phụ thuộc phải là trẻ mồ côi: Nếu libfoo được cài đặt, nhưng cả fooxfoo đều không, deborphan có thể quyết định nó phải là trẻ mồ côi. Một chế độ thất bại ở đây là các thư viện có thể được cài đặt riêng cho các công cụ mà họ cung cấp (libxml2 cho xmllint trước khi được đóng gói lại thành libxml2-utils) hoặc đơn giản là có sẵn cho mục đích phát triển. Những gói như vậy không phải là trẻ mồ côi. Ngoài ra, deborphan tập trung vào các thư viện, do đó, nó bỏ lỡ một số trẻ mồ côi không phải là thư viện mà apt theo dõi (các gói lỗi thời so với các gói mồ côi) .


2
Brilliant làm việc cho tôi cảm ơn. Nó cũng đã loại bỏ muninvì một số lý do, nhưng tôi có thể đưa nó trở lại đủ dễ dàng sau đó.
Ngày

4
Ghi nó! Tôi đã phải trích dẫn 'libx11-.*'để ngăn chặn vỏ khỏi hình cầu.

1
@Maxx, câu trả lời tuyệt vời, nhưng trong tất cả các kịch bản của bạn, bạn đã không mô tả nó như thế nào khi anh ấy chạy cái apt-get removemà nó muốn install xtermvà hai cái khác. Tôi cũng đã trải nghiệm điều này và không thể giải quyết nó.
Madivad

2
Cài đặt raspbian sạch, chưa được mở rộng, sau khi nâng cấp apt-get, nâng cấp dist : rootfs ... 94% /. Sau khi apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /Câu trả lời tuyệt vời, cảm ơn rất nhiều!
Daniel F

2
Và sau khi 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

Dòng đầu tiên cài đặt deborphansẽ loại bỏ bất kỳ gói mồ côi nào.

Dòng thứ hai loại bỏ các gói cốt lõi của hệ thống X11 LXDE, Samba (Chia sẻ tệp Windows), phông chữ, Gnome và các nội dung khác liên quan đến môi trường máy tính để bàn của Raspberry Pi.

Dòng thứ ba loại bỏ bất kỳ gói mồ côi nào được phát hiện bởi deborphan.

Dòng thứ tư loại bỏ bất kỳ gói không cần thiết.

Dòng thứ năm xóa bộ nhớ cache gói.


3
Chào mừng bạn đến với Raspberry Pi Stack Exchange! Mặc dù điều này về mặt kỹ thuật có thể trả lời câu hỏi, tốt hơn là nên đưa ra một số lời giải thích về cách thức hoạt động của nó và chính xác những gì nó đang làm.
RPiAwesessess

1
Chạy các lệnh đó trên bản cài đặt Raspbian hoàn toàn mới, tôi đã chuyển từ ít hơn một gigabyte miễn phí trên thẻ SD 4GB sang 2,5 GB miễn phí. Đối với tôi ít nhất đây là câu trả lời chính xác.
cướp

2
Câu trả lời được chấp nhận rất sâu sắc nhưng thực tế nó không đưa ra một danh sách để hoàn thành vấn đề của OP. Câu trả lời này có thể là barebones, nhưng nó thực sự hoàn thành những gì OP (và tôi) thực sự cần
portforwardpodcast

Tại sao gỡ cài đặt samba? Đây không phải là một ứng dụng GUI. Có thể cần thiết cho mạng.
Dogweather

9

1 /. Để loại bỏ tất cả các máy tính để bàn tôi vừa làm (hãy pha một bình cà phê. Đi bộ điều này sẽ mất một lúc) ...
apt-get remove --auto-remove --purge libx11-.*

2 /. Sau đó, tôi đã cài đặt deborphan để thoát khỏi các tệp mồ côi ...
sudo apt-get install deborphan

Nếu bạn muốn xem những gì đã mồ côi, hãy làm điều này ...
deborphan -sz

3 /. Sau đó, tôi xóa tất cả các tập tin mồ côi ...
sudo apt-get remove --purge $(deborphan)

Cuối cùng làm điều này để loại bỏ các gói không cần thiết không mồ côi ...
sudo apt-get autoremove

Kết quả cuối cùng: Không đầu và sạch như còi


2
apt-get remove --dry-runhoàn toàn không làm gì , nhưng in tin nhắn trên màn hình.
lenik

7

một cái nhìn ở đây nhưng cuộn xuống phần về tasksel.

Chạy tasksel --list-taskstrên pi qua wifi ssh mang lại cho tôi (sau khoảng 30 giây):

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

Vì vậy, tasksel remove desktopnên làm những gì bạn muốn [xem bình luận] . Trang người đàn ông hơi ngắn gọn và bí ẩn, có lẽ vì taskel chủ yếu dành cho những người duy trì debian. Nếu điều này hoạt động cho chúng tôi biết;)


Cảm ơn, tôi chưa bao giờ nghe nói đến tasksel, mặc dù tôi có một lượng kinh nghiệm Ubuntu khá lớn. Thật không may, tôi đã thử điều này, phải mất một thời gian để chạy remove desktoplệnh nhưng tất cả các gói "đồ họa" vẫn còn đó theo aptitude.
Ngày

Tôi cũng không có, nhưng tôi đã hơi bối rối khi tôi nhận thấy chỉ cần loại bỏ apt một số thành phần X cơ bản đã không kéo toàn bộ ngăn xếp phụ thuộc, mà tôi nghĩ nó sẽ như vậy. Tôi tìm thấy một trang tốt hơn cho taskel, và thực sự đã kích hoạt ứng dụng ncurses ( taskselkhông có tùy chọn). Đẹp, chắc chắn bây giờ là 'u' có nghĩa là metapackages are't cài đặt, và nếu bạn cài đặt 'máy tính để bàn, bạn sẽ nhận được một nhận được nhiều hơn chỉ là phiên bản lxde wiki.debian.org/tasksel Vì vậy, không xúc xắc. Tôi nhận thấy siêu dữ liệu "xorg" từ apt-cache search metapackagethực tế cũng không được cài đặt. Đổ lỗi cho những người đồng tính nữ tôi đoán.
goldilocks

2
Tôi sẽ để lại câu trả lời này để cứu ai đó vào ngõ cụt, hoặc trong trường hợp ai đó có thể làm sáng tỏ hơn.
goldilocks

5

Ngoài ra, bạn có thể thử hình ảnh tối thiểu Raspbian này: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/


2
Không trả lời câu hỏi nào cả. Câu hỏi là làm thế nào để gỡ cài đặt X, không phải cách cài đặt HĐH mới mà không có X. Điều này tốt nhất nên để lại như một bình luận, hãy thử đặt câu hỏi của riêng bạn hoặc cung cấp một câu trả lời hữu ích để nhận được đại diện cần thiết để bình luận. Liên kết tốt đẹp không kém.
Impulss

3

Dựa trên thông tin về nhiệm vụ, có thể tìm ra rằng có một máy tính để bàn gói meta, tham chiếu tất cả các gói liên quan đến GUI khác. Vì vậy chỉ cần

sudo apt-get remove task-desktop

Điều này sẽ loại bỏ nhiều gói khác (liên quan đến GUI / Desktop).

Bối cảnh: tên của gói task-desktopcó thể được tìm thấy bằng cách chạy các lệnh taskel sau:

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

0

Một tùy chọn khác là sử dụng năng khiếu mà bạn nên luôn luôn thích, nếu bạn sẽ làm nhiều hơn là chỉ cài đặt hoặc xóa một vài gói.

Bắt đầu năng khiếu như root bằng cách gõ sudo aptitude. Trong chế độ xem Gói tiêu chuẩn về năng khiếu, mục nhập danh sách cuối cùng là Taskstrong đó bạn có thể chọn các tùy chọn khác nhau được liệt kê bởi taskel. Điều hướng qua các mục với j, kenter. Đánh dấu một mục sẽ được xóa bằng cách nhập _(gạch dưới) trên mục được tô sáng. Điều này chỉ chuẩn bị hành động. Để thực hiện các hành động nhấn g.

Đọc về năng khiếu trong hướng dẫn sử dụng debian .


0

Nhập mã này:

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
Vì vậy, để làm rõ, sự khác biệt duy nhất giữa dòng lệnh của OP và của bạn, là việc sử dụng purgeen thay cho remove?
Greenonline
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.