fbterm&jfbterm:不須要 X 服務也能運行的終端模擬器……

-- 這兒的博文已再也不更新。linux

-- fbtermjfbterm運行在覈心控制檯上,是一種 shell 程序(相似於圖形界面下的終端模擬器),依靠 freetypefontconfig 來提供基本的字體渲染,不須要 X 服務也能夠支持基本的中文顯示。固然了,fbterm 的功能不只僅只有這點:若是你打算使用它並但願能得到GUI下終端模擬器般的體驗,那還要嘗試對fbterm終端的字體等進行調整和配置並搭配tmux。不只如此,若是您須要的話,還能夠在上面進行播放多媒體、輸入中文、瀏覽網頁等工做……c++

-- 但遺憾的是:控制檯版本的網絡瀏覽器功能還不夠完善。它們還不提供某些圖形界面的網絡瀏覽器的某些功能,並且 Arch Linux 的官方源中已經再也不包含它們了(多是由於開發已經中止或者開發進度滯後了,這個項目貌似已經從 google code 上移除了),所以要使用它們只能選擇從 AUR 上或者從其它地方獲取源碼後手動編譯。git


-- 尷尬的是:雖然我從AUR上獲取到了fbterm的源代碼並能成功構建運行,但最終卻發現位於 AUR 上的 fbterm 也不是很友好(它會讓 Linux Console 在運行了 fbterm 以後就會進行某些環境的自動配置,好比設定終端類型(即設置 TERM 變量)爲 fbterm(理論上 fbterm 已經支持 256 色,而 Linux Console 僅支持 16 色),但這並非我想要的結果或者說是那些基於 ncurses 庫的僞圖形界面程序(好比 mocp 和 alsamixer 以及 mc,恰恰它們又是我所喜歡的幾個程序)不但願的,它們都很是依賴於終端類型的設定,在沒有 X 環境時它們一般但願終端類型是 linux,若是終端類型被設置成了 fbterm,它們雖然能夠正常啓動可是界面顯得有些凌亂甚至不能正常響應鍵盤輸入(儘管這能夠經過臨時設定 TERM 來更改,但每次都要這樣讓我以爲很厭煩)。除了 vim 以外。github

-- 一個好消息是:不論是使用位於AUR上的仍是從其它地方編譯而來的,我都發現:若是在fbterm上運行了 tmux,那麼終端類型會被改變爲 screen,不只上面的幾個問題直接迎刃而解,貌似還多了一些特性(除了少數程序運行不正常,大多數均可以正常運行並具備不錯的顯示)。所以,若是你打算使用tmux,那麼手動編譯就再也不是惟一選擇……shell


若是你但願使用fbterm並打算手動編譯安裝(假如這兒的這個地址已經不可用,而你又表示願意相信我,那麼你能夠嘗試去我在git上的備份看看).....

fbterm 依賴:vim

  • 必須依賴:freetype2 fontconfig
  • 可選依賴 libx86(vesa) gpm(mouse support)
  • gcc <= 5.4

fbterm 在編譯時不能使用版本太新(fbterm 1.7 及如下的版本用 6.1 及以上的 gcc,g++ 編譯貌似會失敗)的編譯器進行編譯,某些特性在新版本的編譯器中可能已經被取消了。瀏覽器

若是你的系統中存在多個不一樣版本的編譯器,那麼能夠在手動編譯時經過 configure 腳本從命令行上傳遞變量給 make 來告訴 make 在編譯時到底使用系統中的哪個編譯器來做爲實際編譯。容許傳遞的變量和全部的選項能夠經過源碼包下的 ./configure --help 來獲得:bash

  • --enable-FEATURE[=ARG] include FEATURE [ARG=yes] .......
  • --disable-gpm disable gpm mouse support [[default=auto]] 是否禁用控制檯鼠標功能支持,默認會自動檢測,若是已經安裝了 gpm 就啓用不然就不啓用。若是不須要,顯式禁用(--disable-gpm=yes)
  • --disable-vesa disable VESA video card support [[default=auto]] 是否禁用 vesa 支持

一些對 make 有效的環境變量:網絡

  • CXX C++ compiler command # 指定 c++ 編譯器的位置
  • CXXFLAGS C++ compiler flags # 指定 c++ 編譯器編譯標誌,好比頭文件和庫的路徑
  • LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a anonstandard directory <lib dir>
  • LIBS libraries to pass to the linker, e.g. -l<library>
  • CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> If you have headers in a nonstandard directory <include dir>
  • CC C compiler command # 指定 C 編譯器的位置
  • CFLAGS C compiler flags # 指定 c 編譯器編譯標誌,好比頭文件和庫的路徑
  • PKG_CONFIG path to pkg-config utility
  • .........

在個人Arch Linxu系統上,gcc 版本已經是 >= 6.1,所以很天然的,編譯 fbterm 1.7 沒有成功。框架

我嘗試在編譯過程指定了在其它系統上已經編譯好的編譯器,版本稍舊(若是是在 Arch Linux 上,你能夠到它的存檔庫裏下載舊版本的 gcc 及其依賴包而後嘗試將 gcc 降級 1~2 個版本( < 6.1 >= 4.9)後再編譯,但這種方式並不推薦,由於若是你沒有在編譯完成後及時恢復 gcc 的版本到原來的版本,那些依賴於特定編譯器庫的應用可能都沒法啓動而致使整個系統都沒法啓動……)。

tmp=/usr/local/tmp-tools/gcc-4.9.2/bin CC=$tmp/gcc CXX=$tmp/g++ \
./configure && make -j5 && sudo make install

配置 fbterm

默認安裝好未作任何配置的 fbterm 直接用普通用戶運行可能會失敗(雖然可使用根用戶來運行,但這並不推薦),fbterm 已經提供瞭解決方案並對其作出瞭解釋:

  • fbterm 在運行時須要臨時使用根用戶的權限來存取內核(聽說這是爲了映射某些鍵),也許給 fbterm 設置 uid 位是最合適的方法,就像 passwd 程序同樣。否則以普通用戶運行的 fbterm 會收到一個 can't change kernel keymap.....同樣的消息,這時你也許會發現 fbterm 的某些快捷鍵也用不上,好比fbterm用於新建終端窗口的 Ctrl+Meta+C 和切換終端窗口的 Shift ←,Shift →)等。
#  普通用戶須要加入 video 組纔能有打開 fbdev 的權限。
gpasswd -a $USER video
# fbterm 設置鍵盤映射時須要臨時具備存取內核的權限。
chmod u+s $(which fbterm)
  • 若是是編譯的話,fbterm 的 terminfo 文件可能也要放到合適的位置(好比 /usr/share/terminfo/f/ $HOME/.terminfo/f/ )下。
# fbterm 的 terminfo 文件 fbterm 須要放到合適的位置。否則在 fbterm 下,某些應用(好比 vim)可能不會正常工做。
# 若是你在系統中沒有找到 fbterm 的 terminfo 文件,那能夠嘗試手動編譯:
# 首先進入 fbterm 源碼下的 terminfo 目錄中:
# 除非以根用戶執行,不然 tic 會將編譯出來的 terminfo 文件放到用戶級目錄中($HOME/.terminfo/f/),若是要編譯的 terminfo 文件已經存在了將會致使 tic 命令執行失敗。
tic fbterm

fbterm 運行時配置及基本快捷鍵

能夠經過傳遞參數給 fbterm 或者在配置文件中定義選項來更改它的行爲。注:配置文件不是 shell 腳本,shell 指令無效。

============ file ~/.fbtermrc ===========

font-names=DejaVu\ Sans\ Mono\ for\ Powerline:Style=Bold
font-size=19
# ......
color-foreground=7
color-background=0
text-encodings=UTF-8
cursor-shape=1 # fbterm 光標形狀
cursor-interval=0 # fbterm 光標閃爍時差,0 即爲不閃爍
input-method=fcitx-fbterm # fbterm 輸入法
# .....

fbterm基本組合鍵列表

  • Ctrl+Meta+C 新建一個窗口
  • Shift <- 或者 Shfit -> 在窗口之間切換
  • ……

若是你以爲在 fbterm 上使用背景圖片能增長一些點綴的話,那就給 fbterm 設置背景圖片。不過在使用背景圖片以前,你可能須要先安裝 fbv。

假如你但願每次啓動 fbterm 時使用不一樣的背景圖片,那麼背景圖片的路徑可使用位置參數的形式傳遞給 fbv),若是寫成了 shell 腳本又沒有設置 fbterm 在登陸 tty 時自動啓動的話。若是 X 用的少,shell 又是 Bash,那麼能夠選擇在登陸 tty 時自動進入 fbterm,若是你但願如此的話。

下面的技巧來源於 Wiki:

============== file: ~/.bashrc ===============

[ "$TERM" = "linux" ] && echo -en "\e]P7ffffff"
if [[ `tty` = \/dev\/tty[1-6]  ]] && type fbterm &> /dev/null;then 
  tmp=/home/external
  echo -en "\e[?25l" #hide cursor
  fbv -ciuker "$tmp/usr/share/backgrounds/fbterm.jpg" << EOF
q
EOF
  shift
  unset tmp
  export FBTERM_BACKGROUND_IMAGE=1
  LANG="zh_CN.UTF-8" fbterm
fi

fbterm 中文輸入法:fcitx-fbterm? yong? ibus-fbterm?

若是你但願在 fbterm 上輸入中文,那麼安裝一個 fbterm 中文輸入法並激活它就是必要的。

  • 聽說:fcitx 框架的 fcitx-fbterm 已經中止開發了,但還能在 git 上找到。另外,部分 Linux 發行系統源中也尚未移除這個軟件包。
  • fcitx-fbterm 是用 cmake 來配置的,所以在編譯以前可能須要先安裝 cmake。最簡單的安裝方法能夠從 INSTALL 文檔取得。
  • 若是你要編譯安裝fcitx-fbterm,首先進入源碼目錄,開發者推薦在單獨的目錄中進行編譯:
mkdir build;cd build
cmake .. && make && sudo make install

若是你已經運行桌面環境而且 fcitx 在桌面環境自動啓動的條目中,那能夠直接經過 Ctrl Space(這能夠在 fcit 配置中更改)切換(若是不能運行,能夠先嚐試執行一遍 fcitx-fbterm-helper 腳本)了。

若是你沒有運行 X 或者是沒有安裝 X 可能須要前後臺啓動 fcitx 而後直接使用 Ctrl Space 切換。然而不幸的是,搜狗拼音 for Linux 在 fbterm 上使用時出來的候選框文字全是亂碼(其它的 fcitx 框架輸入法(如 fcitx-googlepinyin,fcitx-sunpinyin 彷佛並無發現這個問題))的問題一直沒有解決。

LANG="zh_CN.UTF-8" fcitx &>/dev/null & # 屏蔽輸出與錯誤消息並在後臺運行 fcitx,一些 Linux 發行要求同時啓動 dbus。

另一個候選是小小輸入法(yong)。安裝與配置都不是很難,雖然能正確顯示候選文字也能輸入漢字但仍是存在 bug。

你也許會但願在那上面播放多媒體,但遺憾的是我也只曉得用mocp或者cmus能夠播放音頻;若是您想要在那上面播放視頻(哦,天哪!我都不知道你爲何會有這麼bt、恐怖而又無聊至極的想法),那我就沒什麼辦法了(我也不想產生這種想法),可是說真的:個人確見過別人在那上面看電影……

jfbterm 和 fbterm 是一類東西,不過不管是從 AUR 上構建安裝仍是使用起來都存在着問題(一個由於依賴而從網站上下載的內核包可能會通不過 gpg 檢查致使 jfbterm 編譯沒法開始,而實際只用到了其中的部分代碼)……

ljca 2017-?

相關文章
相關標籤/搜索