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-?

相关文章
相关标签/搜索