日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Linux 桌面玩家指南:10. 没有 GUI 的时候应该怎么玩

發(fā)布時間:2023/12/15 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 Linux 桌面玩家指南:10. 没有 GUI 的时候应该怎么玩 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

特別說明:要在我的隨筆后寫評論的小伙伴們請注意了,我的博客開啟了 MathJax 數(shù)學(xué)公式支持,MathJax 使用$標(biāo)記數(shù)學(xué)公式的開始和結(jié)束。如果某條評論中出現(xiàn)了兩個$,MathJax 會將兩個$之間的內(nèi)容按照數(shù)學(xué)公式進行排版,從而導(dǎo)致評論區(qū)格式混亂。如果大家的評論中用到了$,但是又不是為了使用數(shù)學(xué)公式,就請使用$轉(zhuǎn)義一下,謝謝。

想從頭閱讀該系列嗎?下面是傳送門:

Linux 桌面玩家指南:01. 玩轉(zhuǎn) Linux 系統(tǒng)的方法論
Linux 桌面玩家指南:02. 以最簡潔的方式打造實用的 Vim 環(huán)境
Linux 桌面玩家指南:03. 針對 Gnome 3 的 Linux 桌面進行美化
Linux 桌面玩家指南:04. Linux 桌面系統(tǒng)字體配置要略
Linux 桌面玩家指南:05. 發(fā)博客必備的圖片處理和視頻錄制神器
Linux 桌面玩家指南:06. 優(yōu)雅地使用命令行及 Bash 腳本編程語言中的美學(xué)與哲學(xué)
Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虛擬機體驗
Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 編寫能在 x86 實模式運行的 16 位代碼
Linux 桌面玩家指南:09. X Window 的奧秘

前言##

前一篇講了 X Window,這一篇就來講講沒有 X Window 的 Linux,主要是 Linux 的字符模式,甚至是在進入 Linux 之前的 Grub 命令行模式。本來想把這一篇的標(biāo)題叫《字符界面怎么玩》,或者《沒有圖形界面怎么玩》,但是怎么想都覺得不準(zhǔn)確。去掉桌面環(huán)境的 Linux,并不一定就不是圖形界面,因為 Linux 圖形界面無處不在。以前我使用 Linux 桌面的時候,總是有一個誤區(qū):認為只有 XServer 啟動后,才能夠訪問到圖形系統(tǒng),否則只能訪問字符界面。隨著對 Linux 的認識逐步加深,才發(fā)現(xiàn)即使在 XServer 啟動之前,圖形界面也是無處不在的。例如,Grub 的系統(tǒng)啟動菜單,可以是圖形化的,還可以通過改背景和主題進行美化。再例如在 Linux 初始化過程中,有一個 PlyMouth 軟件,可以直接通過內(nèi)核的 DRM 模塊訪問圖形硬件,從而顯示一個圖形化的啟動界面和進度條,同理,PlyMouth 也是可以通過更改主題進行美化的。最后,當(dāng) Linux 初始化完成后,會給我們顯示一個讓我們登錄的圖形界面,這就是 DM(Display Manager),這個 DM 既是 XServer 的父進程,負責(zé)啟動 XServer,又是一個 XClient,給出圖形化的登錄接口。登錄成功后,它又是 Gnome Shell 的父進程,負責(zé)啟動 Gnome Shell。還有,即使在純字符界面下,也是可以使用 FrameBuffer 獲得圖形功能的,甚至可以截圖和播放視頻。唯一的區(qū)別,就是在這些模式下,在沒有桌面環(huán)境的情況下,我們和計算機的交互,往往只能通過 CLI 進行。所以,我給這一篇取名《沒有 GUI 的時候應(yīng)該怎么玩》。

逆天的 GRUB##

Linux 系統(tǒng)啟動的過程是這樣的:先由 BIOS 啟動一個系統(tǒng)引導(dǎo)程序;然后系統(tǒng)引導(dǎo)程序負責(zé)把 Linux 的內(nèi)核加載到內(nèi)存,同時把 initrd 加載到內(nèi)存,然后把控制權(quán)交給 Linux 的內(nèi)核;Linux 的內(nèi)核初始化完成后,將控制權(quán)交給 init 程序;init 程序負責(zé)啟動各種服務(wù)。如果要啟動圖形桌面系統(tǒng),則 init 先啟動一個窗口管理器,由窗口管理器負責(zé)用戶的登錄和驗證;用戶登錄和驗證成功后,窗口管理器負責(zé)啟動 X 服務(wù)器和客戶端,進入桌面系統(tǒng)。如果是不需要圖形桌面系統(tǒng)的 Linux,則 init 啟動 login 程序,login 程序負責(zé)用戶的登錄和驗證,驗證成功后,啟動一個 shell。

GRUB 就是目前 Linux 系統(tǒng)使用的系統(tǒng)引導(dǎo)程序,是計算機啟動后運行的第一個程序(當(dāng)然,BIOS除外)。它在將 Linux 內(nèi)核加載到內(nèi)存的時候,還可以向內(nèi)核傳遞各種參數(shù)。目前的 Linux 發(fā)行版使用的 GRUB 都已經(jīng)是第 2 版了,它的功能和配置都和以前的版本不一樣。網(wǎng)上很多文章都是基于以前的 GRUB Legacy 版本進行的講解,已經(jīng)不能適應(yīng)現(xiàn)在新的形勢了。

GRUB 的文檔在這里:https://www.gnu.org/software/grub/manual/grub/。從前面的介紹可以看出,GRUB 是計算機啟動后運行的第一個程序,這個時候 Linux 的內(nèi)核還沒有加載,其它的程序也都不可能運行。這時有人就會想了,這個 GRUB 的功能應(yīng)該相當(dāng)有限吧。我剛開始也是這么想的。但是當(dāng)我讀完前面給出的 GRUB 文檔后,我的思想被徹底顛覆了。GRUB 的功能太 TM 強了,簡直逆天。

那么這個一開機就啟動的簡單程序究竟具有哪些讓人意想不到的功能呢?請看我列舉幾條:

能夠訪問任何設(shè)備上的數(shù)據(jù),不管你是硬盤、軟盤還是光盤;
能夠探測到所有的內(nèi)存;
能夠識別大部分的文件系統(tǒng),不管你是 FAT32、NTFS 還是 ext2/ext3/ext4;
能夠識別文件系統(tǒng)中的文件,文檔中說它可識別大部分可執(zhí)行文件格式,ELF什么的根本不在話下;
能夠使用 .png、.jpg 格式的圖片作為背景,說明它能夠識別一些圖片格式;
對字體的支持稍微差一點,好像只能使用 PFF2 格式的字體;
當(dāng)然可以讀取和輸出硬盤上的文本文件;
據(jù)說還能播放樂曲;
支持聯(lián)網(wǎng),可以從網(wǎng)絡(luò)上啟動操作系統(tǒng);
可以支持串口輸入輸出。

這些功能真的是已經(jīng)超強了,就快趕上一個操作系統(tǒng)了。重要的是,它還提供了一個非常好用的命令行界面,該命令行界面的使用方法和 Linux 系統(tǒng)中的 Shell 極其接近,也支持編程、支持環(huán)境變量,其編程的語法也和 Bash 差不多。再加上 GRUB 提供的豐富的命令,該界面使用起來爽得不要不要的。

GRUB 實戰(zhàn)##

實踐出真知,下面以 Ubuntu 為例開始實戰(zhàn)。

GRUB的界面###

剛安裝好的 Ubuntu 啟動時不顯示 GRUB 界面,因為它在設(shè)置中把它隱藏了。它的啟動畫面是這樣的:

必須按一下 ESC 鍵,我們才能夠看到 GRUB 的菜單,它是這樣的:

上面這個界面想必大家已經(jīng)很熟悉了。在這個界面中,如果按下 c 鍵,就會切換到 GRUB 的命令行界面,如下:

還有一種情況就是,如果大家在使用 Linux 過程中不小心刪除了 /boot/grub/grub.cfg,或者配置錯誤,或者刪除了 Linux 系統(tǒng)所在的硬盤分區(qū)的數(shù)據(jù),使得 GRUB 無法正確加載 Linux 系統(tǒng),也會自動進入到這個命令行界面。

GRUB 支持的命令###

GRUB 的命令補全功能非常方便,只要按一下 TAB 鍵,就可以顯示它支持的所有命令。命令之后按 TAB 鍵,可以自動補全文件名。下面是 GRUB 支持的命令,我按 TAB 鍵調(diào)出來的:

使用ls命令可以列出目錄和文件,使用cat命令可以輸出文本文件的內(nèi)容。在 GRUB 中,使用(hd0, msdos1)或者(hd0, gpt1)識別硬盤分區(qū),使用(hd0, gptN)/boot/grub/grub.cfg這樣的形式識別文件。由于 GRUB 能自動識別根分區(qū),所以我下面的命令中省略掉了指定硬盤分區(qū)的部分。如下圖:

在上圖中,我使用cat /etc/fstab命令顯示了我系統(tǒng)中硬盤分區(qū)的情況。可以看到,我使用的是 GPT 分區(qū)格式和 EFI 固件,硬盤分了三個去,第一個分區(qū)的掛載點是/boot/efi,并且是 vfat 格式的文件系統(tǒng),第二個分區(qū)的掛載點是根目錄/,第三個分區(qū)是 swap 空間。按照 GRUB 的術(shù)語,則分區(qū)(hd0, gpt1)是掛載的/boot/efi,分區(qū)(hd0, gpt2)是根目錄,分區(qū)(hd0, gpt3)是交換分區(qū)。可以看到,GRUB 中硬盤是從 0 開始計數(shù)的,而分區(qū)是從 1 開始計數(shù)的。

GRUB 的環(huán)境變量###

我在之前的某一篇隨筆中講過,命令行參數(shù)、環(huán)境變量、配置文件是對軟件進行配置的三駕馬車,GRUB 也不例外,它的很多行為也受環(huán)境變量控制。下面看一個例子,當(dāng)我想查看 GRUB 的啟動配置文件/boot/grub/grub.cfg時,使用cat命令查看該文件的內(nèi)容,但是由于該文件太長,一個屏幕顯示不完,所以只能看到最后幾行,如下兩圖:

這是非常蛋疼的,但還不是最郁悶的,畢竟/boot/grub/grub.cfg是系統(tǒng)中的一個文件,大不了我進 Linux 后用 vim 看。最蛋疼的是某些命令的輸出,只能看到最后幾行,又不能保存下來,真的讓人捉急。就像下面這個例子,我使用videoinfo命令查看我的 GRUB 支持哪些圖形分辨率:

這個時候,就只能通過設(shè)置環(huán)境變量的方法來解決問題了。使用set pager=1命令設(shè)置環(huán)境變量pager,讓 GRUB 的輸出啟用分頁,如下圖:

我們還可以通過不帶參數(shù)的set命令顯示所有可用的環(huán)境變量,如下圖:

也可以使用echo命令輸出某一個環(huán)境變量,如下圖:

更改分辨率###

我們可以控制 GRUB 顯示界面的分辨率,還可以通過 GRUB 控制 Linux 啟動進入字符模式后的分辨率。前提條件是要看我們的 BIOS 和顯卡支持哪些模式。可以通過 videoinfo命令查看,如下圖:

我使用的是虛擬機,因為玩 GRUB 不使用虛擬機無法截圖啊。如果采取的是 EFI 固件,則其輸出如下:

如果采取的是 Legacy BIOS,則其輸出如下:

可以看到,如果使用的是 Legacy BIOS,它的顯示模式是由 ' VESA BIOS Extension Video Driver ' 提供支持的。如果使用的是 EFI,則其顯示模式是由 ' EFI GOP driver ' 提供支持的。在我的虛擬機中,它們能提供的最高分辨率也只有 1152 x 864,遠遠達不到 1920 x 1080。但是在我的物理機中,都是可以達到 1920 x 1080。而且貌似只能進入 1920 x 1080,想改小還改不了。在物理機上,想通過改小分辨率,然后利用顯示器的放大功能來放大字體的夢想是破滅了的。

在虛擬機中,我要做的是把分辨率改大,至少讓我完全進入 Linux 字符界面的時候有個 1024 x 768 的分辨率吧,不然字符界面用起來豈不是太憋屈。可以通過修改 /etc/default/grub文件,然后調(diào)用sudo update-grub命令更新 GRUB。如下圖,使用sudo vim /etc/default/grub修改配置文件:

在上面的這個文件中的注釋里,也寫得很明白了,要修改 GRUB 和 Linux 字符界面的分辨率,可以通過修改 GRUB_GFXMODEGRUB_GFXPAYLOAD_LINUX 參數(shù)來設(shè)置,而且千萬不要設(shè)置GRUB_TERMINAL=console,不然就真的進入只有文字的文字模式了,沒有 Graphic 的支持,還談啥分辨率呢。

然后重啟系統(tǒng),可以看到我們的 GRUB 界面變大了一圈,如下兩圖:

下面進入 Linux 的字符界面,進入 Linux 字符界面的方式是啟動進入 Linux 后,使用 sudo systemctl set-default multi-user.target,然后重啟,在 1024 x 768 的分辨率下開一個 vim 看看,如下圖:

又找到了懷舊的感覺,不是嗎?唯一的缺憾是字太小。如果是在我的物理機上,15.6寸 1920 x 1080 的屏幕,字會小得根本無法看。下面,我們再來探討 Framebuffer 的正確打開姿勢。

Linux 純字符模式和 Framebuffer##

Linux 純字符界面的用途###

裝逼必備
省資源,服務(wù)器一般不安裝圖形界面
圖形界面崩潰后緊急救援

進入字符界面的正確方式###

目前新的 Linux 發(fā)行版基本上都使用 Systemd 作為 init 程序,不再使用 SysV init 和 Upstart init。所以如果想讓系統(tǒng)啟動后直接進入字符界面,應(yīng)該使用如下命令:

sudo systemctl set-default multi-user.target

反過來,要讓系統(tǒng)啟動后直接進入圖形界面,應(yīng)該使用如下命令:

sudo systemctl set-default graphical.target

另外,Linux 本身提供有虛擬控制臺的功能,使用Ctrl + Alt + F1Ctrl + Alt + F7進行切換,其中有一個是圖形界面,剩下的是字符界面。圖形界面玩崩潰了,就不得不使用Ctrl + Alt + F3切換到字符界面進行救援。

關(guān)于 Framebuffer###

字符界面分兩種,一種是不開啟 Framebuffer 的,另一種是開啟 Framebuffer 的。Framebuffer 是一種圖形驅(qū)動,不開啟 Framebuffer 就是真的全字符,不能改變分辨率,不能顯示圖像,不能截圖。目前最新的 Linux 發(fā)行版默認開啟 Framebuffer。控制 Framebuffer 開啟和關(guān)閉,以及分辨率的方法,是設(shè)置 Grub2 的參數(shù)。修改 /etc/default/grub文件,添加如下參數(shù)可以設(shè)置分辨率:

GRUB_GFXPAYLOAD_LINUX=1024x768x32

然后使用如下命令更新 GRUB2 配置:

sudo update-grub

其中的分辨率必須是我們的硬件支持的。可以通過 GRUB2 命令行中的videoinfo命令查看我們的硬件支持的分辨率。

如果要關(guān)閉 Framebuffer,則這樣更改 GRUB2 的配置:

GRUB_GFXPAYLOAD_LINUX=text

同樣,需要:

sudo update-grub

然后重啟。

字符界面下聯(lián)網(wǎng)##

以前在圖形界面的時候,設(shè)置個網(wǎng)絡(luò)、連接個 wifi 非常簡單,玩兒似的,結(jié)果一進入純字符界面就抓瞎。不聯(lián)網(wǎng),就不能下載和安裝軟件包,后面就玩不下去了。所以進入純字符界面后,要解決的第一件事就是怎么聯(lián)網(wǎng)。說到管理網(wǎng)絡(luò)的工具,大家可以列舉一大堆,什么 ipconfig、iwconfig、ip 等等。但是,在最新的 Linux 發(fā)行版中,已經(jīng)是使用 NetManager 管理網(wǎng)絡(luò)了。通過閱讀 NetManager 的文檔,可以知道它提供一個功能很強大的命令行工具,那就是 nmcli。通過man nmcli可以查看該工具的用法。如下圖:

使用如下命令可以查看可用的 wifi 熱點以及連接 wifi:

nmcli device status                                         #查看網(wǎng)絡(luò)連接的狀態(tài),可以看到各網(wǎng)卡的名稱
nmcli device wifi list iface 網(wǎng)卡名稱                 #查看可用的 wifi 熱點
nmcli device wifi connect **** password ****   #連接 wifi,需要提供 wifi 的名稱和密碼

如下圖:

連上了網(wǎng),Ubuntu 就可以在純字符界面下起飛了。

使用 fbterm##

通過上面的截圖,發(fā)現(xiàn)兩個問題:

在我的 1920x1080 的筆記本電腦屏幕上,默認的字實在是太小;
不能顯示中文,上圖中 wifi 熱點名稱含有中文的,都顯示不出來。

解決辦法是使用 fbterm。一舉解決字體大小問題和中文顯示問題。先安裝 fbterm,使用如下命令:

sudo apt-get install fbterm

先使用sudo fbterm啟動 fbterm 一次,再用exit命令退出,這樣,fbterm 會自動生成一個默認的配置文件~/.fbtermrc,然后修改~/.fbtermrc配置文件中的兩行,設(shè)置使用的字體和字體大小,如下:

font-names=DejaVu Sans Mono
font-size=16

然后使用sudo fbterm命令啟動 fbterm,就可以了。下面是看對比圖,使用 fbterm 之前,Vim 的啟動界面是不能顯示中文的:

使用 fbterm 之后,中文可以正常顯示:

使用 fbterm 之前,閱讀代碼是這樣的:

字非常的小,NERDTree 和 Tagbar 里面的符號顯示也有問題。使用 fbterm 之后,就很漂亮了,如下圖:

這才是全高清屏該有的顯示效果嘛。關(guān)于在 fbterm 下輸入中文,我嘗試過 fbterm-ucimf,也嘗試過 fcitx-frontend-fbterm,都沒有成功。后來我就不試了,反正我也沒有在全字符界面下輸入中文的需求。

顯示 Framebuffer 的信息##

使用 fbset 可以查看 Framebuffer 的信息,包括 Framebuffer 是否開啟,分辨率是多少,由哪個內(nèi)核模塊提供支持等。使用如下命令安裝 fbset:

sudo apt-get install fbset

使用sudo fbset -i命令查看 Framebuffer 的信息,如下圖:

在 Framebuffer 下截圖##

使用 fbgrab 可以在 Framebuffer 下進行截圖。使用如下命令安裝 fbgrab:

sudo apt-get install fbgrab

使用 fbgrab 命令的方式如下:

sudo fbgrab -c N filename.png      #對 /dev/ttyN 對應(yīng)的終端進行截圖
sudo fbgrab -C N filename.png     #先跳轉(zhuǎn)到 /dev/ttyN 對應(yīng)的終端,再進行截圖
sudo fbgrab -s N filename.png      #先等待 N 秒,再進行截圖

我前面的圖片都是使用 fbgrab 截的,這里就不貼圖了。

在 Framebuffer 下查看圖片##

使用 fbi 可以在 Framebuffer 下查看圖片,同樣使用sudo apt-get install fbi安裝這個軟件。在看圖界面下按 H 鍵,還會顯示幫助信息。如下圖:

在純字符界面下上網(wǎng)##

使用老牌的上網(wǎng)工具 w3m,安裝方式sudo apt-get install w3m,然后使用w3m https://www.cnblogs.com/就可以訪問博客園了,只有文字哦,圖片就不要想了。效果如下圖:

當(dāng)然,必須在 fbterm 下執(zhí)行才能顯示中文。

視頻播放##

使用 mplayer 播放器可以播放視頻,通過mplayer -vo help命令可以看到,mplayer 支持很多種視頻驅(qū)動,而 Framebuffer 正是其中一種。使用sudo mplayer -vo fbdev2 badapple.mp4播放 Bad Apple 的 PV 視頻,效果如下:

因為這里要錄制 gif 動畫,所以我使用了虛擬機運行 Linux,F(xiàn)ramebuffer 的分辨率設(shè)置為 1024x768。同樣,通過上面的mplayer -vo help命令,還可以看到 mplayer 支持使用 libaa 庫,將視頻播放為字符畫。據(jù)我觀察,只有在圖形界面下效果才可以,純字符界面不行。使用mplayer -vo aa -moniterpixelaspect 0.5 badapple.mp4播放,效果如下:

屏保和裝逼##

當(dāng)然是 cmatrix 啦。效果如下:

版權(quán)申明##

該隨筆由京山游俠在2018年11月02日發(fā)布于博客園,引用請注明出處,轉(zhuǎn)載或出版請聯(lián)系博主。QQ郵箱:1841079@qq.com

總結(jié)

以上是生活随笔為你收集整理的Linux 桌面玩家指南:10. 没有 GUI 的时候应该怎么玩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。