Ubuntu CTRL+ALT+F1~F6 進入命令模式后不支持中文顯示的解決辦法


前言

我在實驗進入linux系統啟動xwindow server而不啟動KDE GNOME等桌面系統時遇到的問題。只啟動x server而不啟動桌面系統,在xserver之上運行一個全屏的圖形界面程序,這樣就能實現該程序對顯示器的獨占,對一般用戶來說他就不能在這台電腦上搞別的動作了,只能用這個程序。一些工業控制、超市收銀等應用場景下都會有這樣的需求,目前這些程序都運行在windows xp (embeded)之下,也有運行於dos的。由於windows xp太被大眾熟悉了,結果這些軟件便不能穩定的運行了。windows也無法實現應用對窗口的獨占,桌面系統是在windows內核實現的,不能說不啟動桌面系統,只要啟動了桌面系統,桌面上的窗口都可以關掉或者干到后台去。

實現這種圖形界面程序對顯示器的獨占,還有另外一種方式——不啟動x server,而啟動系統的framebuffer能力;使用一種支持在framebuffer上實現圖形界面的圖形庫來開發這種程序。通過調研的結果來看,qt 4.6及之后就能夠做到了。但是framebuffer不能夠支持調用顯卡的運算能力進行圖形的渲染,framebuffer只是內存上划出來的一片區域,對應着顯示器上的每一個邏輯像素,只能通過CPU執行指令修改framebuffer然后直接就能反應到顯示器上。linux下還有另外一種技術DirectFB,其介紹說能夠利用GPU進行加速主要應用於嵌入式環境,不知道能不能夠編譯到X86上使用?

(PS:對於xwindow 和KDE GNOME這些桌面系統關系的理解,很多人都是錯誤的。可以參考一下http://www.cnblogs.com/sunsonbaby/archive/2004/08/26/36683.html)

由於滿足上述應用場景采用不啟動x server的方法非常有難度,所以先試驗了只啟動x server不啟動桌面系統的方法。結果編輯啟動配置以便不進入桌面系統時失敗了,卡在進入桌面系統哪里動不了,只好切入到命名模式。但是分辨率只有800*600,漢字還不能顯示,實在是郁悶。勉強把進入桌面系統的配置恢復后,開始解決這個分辨率低,不支持中文的問題。

在linux中一切都是文件,如果linux啟動時支持framebuffer的,必須划出一片內存,虛擬一個文件fb0。估計是因為要降低對資源的消耗,ubuntu默認沒有開啟framebuffer。

第一步,查看顯卡支持的模式

使用hwinfo,如果沒有先安裝。

sudo apt-get install hwinfo

 安裝之后就可以使用下面的命令查看顯卡支持的模式了。

sudo hwinfo --framebuffer

 其實你安裝ubuntu時如果沒有按照顯卡驅動會提示安裝的,一般驅動都是安裝好的。其他的指導還說要安裝v86d,這個得看具體請看來定,如果查看模式沒得結果再安裝也不遲。

sudo apt-get install v86d

第二步,選擇一個模式設置啟動項

我的電腦查看模式之后會有下面這個模式,分辨率最高,色彩最高16位,就選擇這個。

Mode 0x0317: 1024x768 (+2048), 16 bits

然后編輯文件/etc/default/grub,找到下面的項目,改成下面一樣的。其實就是在后面增加了vga=0x0317。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=0x0317"

第三步,設置initramfs支持framebuffer

編輯文件/etc/initramfs-tools/modules,在其后加入行

fbcon
vesafb
vga16fb

(為毛要加這三個,估計也是大家相互抄。有空可以驗證一下只加vesafb是否可以。)

編輯文件/etc/modprobe.d/blacklist-framebuffer.conf,注釋掉出現上面內容的blacklist。

#blacklist fbcon
#blacklist vesafb
#blacklist vga16fb

(vga vesa con都是老顯卡模式標准,現在的顯卡能支持一種就不錯了。)

第四步,跟新grub和initramfs

執行下面的指令。

sudo update-grub
sudo update-initramfs -u

 

第五步,將需要在命令模式下使用的用戶加入video組

這個好多方法的,很多命令都能完成這個功能。直接去改/etc/group文件也可以,但是不推薦。

sudo adduser your_name video

 

有了上面四步,重啟系統再進入命名模式,就會發現分辨率已經提高了。我的電腦到這一步已經可以支持中文顯示了。 因為我按照ubuntu之后就按照了漢語的語言包。

有的教程一開始就讓安裝fbterm。這個沒必要,不用中文輸入的話,就可以不用安裝這個。需要中文輸入的話,是否能不需要fbterm直接實現,我也沒調研,暫時沒這個需求。以后有需求的時候再寫博客。

 

剩余的話

initramfs是個什么玩意?我也是個新手,就我的查找到資料和我的理解,它是對系統啟動時預先分配出來的內存的一種管理技術。linux中一切資源都是文件,那么系統啟動時預先分配的內存也是文件,當作文件管理,就要為其提供進行存儲空間分配的文件系統,initramfs就是這樣一種文件系統。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM