「APT」- 常用网络配置

禁用 IPv6 解析
Convince apt-get *not* to use IPv6 method – Unix & Linux Stack Exchange

echo ‘Acquire::ForceIPv4 “true”;’ | tee /etc/apt/apt.conf.d/99-force-ipv4

或者,使用 apt-get -o Acquire::ForceIPv4=true 选项
代理服务,加速下载
syntax for SOCKS proxy in apt.conf How to use “apt-get” via “Http-proxy” like this? man 5 apt.conf man apt-transport-http man apt-transport-https
有时需要使用 SOCKS/HTTP(S) 代理进行软件包下载,以提高网络下载速度。
操作系统:Kali GNU/Linux Rolling / apt 1.8.4 (amd64)
方法一、创建 /etc/apt/apt.conf.d/99socks.conf 配置:

cat > /etc/apt/apt.conf.d/99socks.conf <<EOF
Acquire::http::proxy “socks5h://127.0.0.1:1080”;
EOF

方法二、命令行指定(推荐)

http_proxy=’http://127.0.0.1:8123′ apt-get update

注意事项,应该使用 http_proxy,而不是 HTTP_PROXY 变量。
附加说明
Differentiate socks5h from socks5 and socks4a from socks4 when handling proxy string #1035 In a proxy string, socks5h:// and socks4a:// mean that the hostname is resolved by the SOCKS server. socks5:// and socks4:// mean that the hostname is resolved locally. socks4a:// means to use SOCKS4a, which is an extension of SOCKS4.[……]

READ MORE

「APT」- 非交互式安装(命令行、使用 Docker 构建)

问题描述
在进行 APT 安装(或升级)时,某些软件的安装需要与用户进行交互,以选择合适的选项。
但是某些情况下,我们无法(或无需)进行交互,比如,Docker 镜像构建。
该笔记将记录:在执行 APT 命令时,如何禁止交互,而采用默认选项。
解决方案
这里以安装 tzdata 包为例,使用如下命令可以禁止交互:

DEBIAN_FRONTEND=noninteractive apt-get install -y –no-install-recommends tzdata

参考文献
bash – apt-get install tzdata noninteractive – Stack Overflow[……]

READ MORE

「Debian/Ubuntu」- 国内源、国内仓库、常用仓库(源)

Debian
netselect-apt
该命令检测每个 Debian 镜像网站,并找到访问最快的(用的时间会很长),会在当前目录产生 sources.list 的文件:

# netselect-apt

The fastest 10 servers seem to be:

http://mirrors.ustc.edu.cn/debian/
http://mirrors.bfsu.edu.cn/debian/
http://mirror.nju.edu.cn/debian/
http://dennou-k.gfd-dennou.org/debian/
http://mirrors.tuna.tsinghua.edu.cn/debian/
http://ftp.yz.yamagata-u.ac.jp/debian/
http://ftp.harukasan.org/debian/
http://debian.csie.ntu.edu.tw/debian/
http://ftp.yz.yamagata-u.ac.jp/debian/
http://ftp.yz.yamagata-u.ac.jp/debian/

Of the hosts tested we choose the fastest valid for http:
http://mirrors.ustc.edu.cn/debian/

Writing sources.list.
Done.

# cat sources.list

deb http://mirrors.ustc.edu.cn/debian/ stable main contrib

./debian-stable.list
./debian-11-bullseye.list ./debian-10-buster.list ./debian-9-stretch.list ./debian-8-jessie.list ./debian-7-wheezy.list
Ubuntu
./ubuntu-22.04.list ./ubuntu-20.04.list ./ubuntu-18.04.list ./ubuntu-16.04 (arm64) ./ubuntu-16.04 ./ubuntu-10.10
KaLi Rolling

# 官方源
deb http://http.kali.org/kali kali-rolling main non-free contrib
de[……]

READ MORE

「Linux」- 桌面环境(使用 Linux 作为工作环境)

问题描述
鉴于工作的关系,管理 Linux 操作系统是我们的日常工作,经常需要在 Linux 中进行实验与验证。经过一段时间的折腾,我们发现我们完全能够在 Linux 下完成日常办公。
既然要在 Linux 下完成办公,常见的办公软件还是要能够正常运行的,或者要找到替代品。因此我们整理该部分笔记,记录在 Linux 中用到的桌面应用程序,这里的应用程序通常都是 Windows 下同类应用程序的替代品。因为这些应用程序多为着名程序,所以通常不会涉命令行程序、Shell 编程等等内容(或者技术相关的内容)。
该部分笔记的主要内容:整理在 Linux 桌面环境中常用的工具(例如 截图工具、系统托盘程序、屏保、输入法、锁屏等等),以及常见办公问题的解决方案。
解决方案
根据 Wikipedia/History of Linux/Desktop environments 维基百科:

KDE was the first advanced desktop environment (version 1.0 released in July 1998), but it was controversial due to the then-proprietary Qt toolkit used.

为什么我们常用 Linux 发行版,而不常用 Windows 操作系统?
我们是如何逐步在 Linux 下完成日常办公? # TODO 这是个很长的故事,并非一蹴而就,日后再分享吧。
起初,只是好奇,喜欢折腾,并附带装逼(多半是因为此)。那时候是 2013 的年底……
然后,在工作中,由于经常与 Linux 打交道(我们只是“使用软件应用”,还没达到“使用操作系统”的层次),所以使用 Linux 环境会使我们的工作更简单(比如服务环境搭建)。
其次,这件事不能怪操作系统,只能怪操作系统中运行的软件。弹窗太多,干扰太多,无法让人专心工作。
最后,“不常使用 Windows 操作系统”不是“完全不使用 Windows 操作系统”。部分工作、部分软件需要使用 Windows 操作系统时,我们还是会使用 Windows 操作系统的。
# 11/10/2019 最近双十一,各种弹窗,都不知道是哪个软件弹出来的。不过我们在Linux下办公,而不用忍受这些东西的影响。
# 02/09/2021 相信我们,用不用 Windows 系统,不是我们能决定的,而是需求决定的。就算我们的主力工具已经完美支持 Linux 操作系统,隔三差五我们还是需要使用 Windows 系统。就算不用 Windows 系统,也要用 Mac 系统,毕竟没有哪个系统看可以包揽所有问题。
# 08/2[……]

READ MORE

「FVWM」- 命令简述

NAME SYNOPSIS DESCRIPTION OPTIONS

章节列表
「X11」- 自定义屏幕分辨率 「Selections」 「GNUStep」 「GTK+3」- 杂记 「RandR :: Resize and Rotate」 「GTK+」- GIMP Toolkit 「GTK+3」- 常用设置 「xdg-utils」[……]

READ MORE

「X Window System」- 基本概念(学习笔记)

X Window System,X11,X,是用于位图显示的窗口系统,是在 UNIX 环境中经常使用的 Client-Server 显示协议。而我们常说的 X、X11 只是简写而已。
X 为图形界面环境提供基本框架:在显示设备上,绘制和移动窗口;与鼠标、键盘进行交互。但是 X 不负责用户界面,因此不同桌面环境之间的差异非常大。
该部分笔记:主要是 X Window System 的相关内容,之所以学习这些内容是为了了解它工作原理、实现某些操作。
软件架构
架构概览
X Window System/Software architecture
X Server / X Client 与我们日常理解的 Server / Client 有些相反: 1)X Server:运行在”客户端“。这个”客户端“指的是本地电脑(笔记本、台式机、Whatever…); 2)X Client:运行在”服务端“。这个”服务端“指的是远程主机;(也可以是”本地“(同一台主机),但是从网络上来看,X Client 依旧是运行在远程);
之所以会出现这个情况是因为:X 是从应用的角度来看,即 X Server 为 X Client 提供显示和 I/O 设备服务。
详细说明
X 采用 Client-Server 架构。特殊的地方在于,Server 运行在本地(用户)主机中,而 Client 运行在远程主机中。
Client 是应用程序,比如 Firefox XTerm XClock 等等。负责与 Server 交流,发出请求,并接收 Server 信息。
Server 是服务端实现,比如 Xorg Server、XFree86 等等。
Server 比较特殊,Server 独占显示控制权,并服务来自 Client 的请求,并负责与用户交互(鼠标、键盘)。因此 Client(应用程序)无需关心显示细节,只需要向 Server 发送指令,比如“绘制从这里到那里的直线”、“渲染字符串”。
这样带来的好处就是 Client 与 Server 可以运行在不同的主机上,我们在本地运行 Server,但是通过 TCP/IP 网络,我们可以运行 Host A 主机上的 Firefox 程序,运行 Host B 上的 Chrome 程序,运行 Host C 上的 Thundbird 程序,而本地运行 Server 只是负责显示这些程序界面(Client 会告诉 Server 显示什么、如何显示),实际的程序运行及资源占用则是发生在远程主机上的。
当然,大多数情况下,我们是单台主机,所以 Client 与 Server 在同个主机上。
常用术语区分
XFree86 / XF86
XF86 是[……]

READ MORE

「GUI frameworks」- 杂记

这一部分是简单介绍一些「图形工具库」的内容。
背景……
因为GTK 3的主题不紧凑,按钮、标题栏太宽,太占空间,所以尝试着写个GTK 3的主题。
我们常说的“GTK”是一个跨平台的「图形工具库」。所以,这里先简单的了解一下「图形工具库」,对「图形工具库」有个基本的概念。
什么是「图形工具库」?
它就是一个库,或者说是框架,通过调用库里的方法来创建窗口界面中按钮、输入框、下拉选等等“部件”。
大多数「图形工具库」还包括他们自己的渲染引擎。渲染引擎可以简单的理解为“在显示器上显示图形的程序”,显示器上显示的内容使用渲染引擎绘制的。
像按钮的宽高、颜色这些“部件的样子“可以硬编码到程序中,或者写入配置文件,然后从配置文件中读取,这些配置文件就是我们说的主题/皮肤。
我们常说的GTK、QT、FLTK都是一些「图形工具库」。
图形工具库的分类
有些图形工具库集成在操作系统中,比如OS X的Cocoa、Microsoft Windows的Windows API等等。
还有些在操作系统之上的单独的层中工作,比如X Window System提供了Xt(X Toolkit Intrinsics),但是Xt只有一些老的工具库在使用,而GTK和QT则绕过了Xt,直接使用了Xlib或XCB库:
参考文献
Wikipedia/Widget toolkit Wikipedia/List of widget toolkits Setting gtk2 and gtk3 theme via config file[……]

READ MORE

「GNUStep」

GNUstep是一个成熟的框架,适用于高级GUI桌面应用程序以及服务器应用程序。
该框架严格遵循苹果的Cocoa(原NeXT的OpenStep)API,但可移植到各种平台和体系结构。
参考文献
访问GNUStep主页[……]

READ MORE

「GTK+」- GIMP Toolkit

参考文献
http://www.devpy.me/10-of-the-best-linux-themes-compared/ http://satya164.deviantart.com/art/Numix-GTK3-theme-360223962 https://www.maketecheasier.com/gtk-themes-for-linux/ https://www.gnome-look.org/p/1170869/ http://www.webhostingsearch.com/articles/top-18-linux-gtk-themes.php[……]

READ MORE

「GTK 3」- 主题开发

因为GTK 3的主题不紧凑,按钮、标题栏太宽,太占空间,所以尝试着定制GTK 3的主题。
相关的文章及手册
# 首先,入门文章
Installing, Obtaining, and Making GTK Themes
Making GTK3 themes – Part 1: Basics
Tutorial for making GTK3 themes
# 然后,官方手册
GNOME DEVELOPER – https://developer.gnome.org
(1)GTK+ CSS Overview (2)Widget Gallery (3)GTK+ CSS Properties
手册(1)(2)(3)用到的频率比较高,尤其是(2)(3)会经常翻阅。
相关的开发工具
# Oomox
Customize And Create Your Own GTK2, GTK3 Themes Oomox GitHub Repository
如何预览自己的主题?
在创建主题时,修改文件并测试效果,然后再调整代码会非常有用。这就需要一些类似于”主题浏览器“的工具:
GTK+ Change Theme
此程序可以更改GTK主题,并允许开发人员预览主题。该程序由一个包含许多小部件的窗口组成,从而为主题提供完整的预览。
要安装此程序,使用“apt-get install gtk-chtheme”安装。
但只能预览GTK+ 2的主题。
LXappearance
此程序可以更改主题,图标和字体。
但只能预览GTK+ 2的主题。
gtk3-widget-factory
此程序可以预览更改的主题,页面上显示各种控件的样式。
要安装此程序,使用“apt-get install gtk-3-examples”安装。
该工具可以预览GTK+ 3的主题。
我的个人经验
我对GTK+ 2的主题都很喜欢,因为整体上是比较紧凑的。
但是GTK+ 3就不一样了,它按钮、组件都很大,不紧凑,不经典。所以,我主要开发的是GTK+ 3主题。
我在Eclipse修改主题的CSS文件,然后使用gtk3-widget-factory(1)进行预览。不过每次修改后,都要重启gtk3-widget-factory进行预览,这个动作就像浏览器里的刷新,但是它又没有”重绘“功能(考虑改进以下,检测文件系统变化(inotify),然后自动重启)。
参考文献
Installing, Obtaining, and Making GTK Themes Making GTK3 themes – Part 1: Basics Tutor[……]

READ MORE

「GTK+3」- 常用设置

解决方案
在 GKT+3 中,默认配置文件,位于 ~/.config/gtk-3.0/settings.ini 文件,默认的属性值从该文件中读取。
参考 Settings: GTK+ 3 Reference Manual 手册,获取所有可用的属性列表;
关闭GTK+3中的滚动条自动隐藏
GTK3 overlay scrollbars ArchWiki/GTK+/Disable overlay scrollbars
隐藏GTK+3的窗口按钮
How to change gtk button-layout in KDE?
这个并不能修改GTK3的窗口关闭按钮。如果要修改GTK3的窗口按钮,则编辑~/.config/gtk-3.0/settings.ini文件,进行如下配置:

[Settings]
gtk-decoration-layout=:minimize,maximize,close

启用或关闭 GTK 的平滑滚动
Turn off smooth scrolling in GTK3
在 GTK SourceView 中,但粘贴大段内容时,会自动向上滚动一段距离,或许该行为的目的是为了用户体验或更好的显示内容; 我们需要关闭该特性,我们不希望在粘贴时自动向上滚动一段距离;
这通过关闭平滑滚动来解决:

[Settings]
gtk-enable-animations=0

参考文献
Settings: GTK+ 3 Reference Manual – GNOME Developer Center[……]

READ MORE

「GTK+」- 主题下载及安装

到哪里下载主题?
(1)、我经常使用的是GNOME-LOOK.ORG网站,里面包含了很多GTK的主题。除此之外还给出了预览和安装方法等等。 (2)、还有一些其他的站点、博客文章,这就要靠你自己去搜索了。
在一般情况下,一个主题中即包含了GTK+2的主题,也包含了GTK+3的主题,它的目录结构通常类似于:

theme-name
├── gtk-2.0
│ └── …
└── gtk-3.0

└── …

某些主题只提供了GTK+2或者GTK+3的支持,可以通过查看目录或者手册中的描述进行甄别。
主题的保存路径
/usr/share/themes/
$HOME/.themes/ 用户主题目录。建议将它们保存在$HOME/.themes中,然后安装gnome-shell-extension-user-theme,以便能够使用gnome-tweak-tool修改gtk3主题。
我目前使用了该目录,而没有使用$HOME/.local/share/themes/目录,因为那个目录中的主题虽然可以显示,但是设置主体后没有生效。
$HOME/.local/share/themes/ 这也是用户的主题目录。
主题加载路径
以GTK+3为例,当应用启动时,将会加载确定的文件:

首先,加载公共配置文件:如果存在,会尝试加载$XDG_CONFIG_HOME/gtk-3.0/gtk.css文件,这通常是~/.config/gtk-3.0/gtk.css文件;
然后,加载用户主题:尝试加载~/.themes/<name>/gtk-3.0/gtk.css文件,其中<name>代表了当前主题的名字;
最后,加载系统主题:尝试加载$datadir/share/themes/<name>/gtk-3.0/gtk.css ,这通常是/usr/share/themes/name/gtk-3.0/gtk.css文件,其中<name>代表了当前主题的名字;

这表示,对于同名主题,~/.themes/的主题会覆盖/usr/share/themes/中的同名主题。另外,/usr/share/themes/可以被所有用户使用,而~/.themes中的主题只能被当前用户使用。
修改主题
可以通过lxappearance或者gnome-tweak-tool来修改主题。
Where is Gtk+ default theme saved
参考文献
Gnome-Look/SGFC – Simple Grey Flat Compact Th[……]

READ MORE

「GTK+3」- 杂记

Gtk-Message: Failed to load module “xxx”
How to install gail and atk-bridge?

# Gtk-Message: Failed to load module “atk-bridge”
apt-get install libatk-adaptor

# Gtk-Message: Failed to load module “gail”
apt-get install libgail-common

渲染 BUG 处理
遇到一个GTK渲染的问题,描述与 Rendering issues with lxpanel tray icons 中的类似:系统托盘图片模糊,在发生变化时不能正确渲染。

解决办法:还是 GTK 版本升级,已有人在社区反馈该问题
以后不敢随便升级了…………,DevOps 带来的优势是持续交付,那对于下游用户来说便是持续升级[……]

READ MORE

「字体与字符集」

本部分将介绍字体、字符集相关的内容。
参考文献
Fonts in the X Window System UTF-8 Fonts in X11R7.7[……]

READ MORE

「Font」- 概念、认识

字体文件格式
pfb(Printer Font Binary)
PFB File – What is it and how do I open it?

# fc-list | grep pitch -i
/usr/share/fonts/X11/Type1/c0419bt_.pfb: Courier 10 Pitch:style=Regular
/usr/local/share/fonts/Courier 10 Pitch Regular.otf: Courier 10 Pitch:style=Regular
/usr/share/fonts/X11/Type1/c0611bt_.pfb: Courier 10 Pitch:style=Bold Italic
/usr/local/share/fonts/Courier10PitchBT-Roman.otf: Courier 10 Pitch:style=Regular
/usr/share/fonts/X11/Type1/c0582bt_.pfb: Courier 10 Pitch:style=Italic
/usr/share/fonts/X11/Type1/c0583bt_.pfb: Courier 10 Pitch:style=Bold

otf(OpenType Font)
OTF vs. TTF Fonts: Which Is Better? What’s the Difference?
ttf(TrueType Font)
TrueType – Wikipedia[……]

READ MORE

「Font」- 字体与字符集的关系

关系简述
每个「字符」都有对应的「码位」,「码位」是对「字符」的编号,它是一个普通的数字。
在将「码位」保存到存储(硬盘)中时,需要用到「字符集」。将「码位」按照「字符集」的规则进行转化,然后保存到存储中。
而「字体」是对应到「码位」的,「字体」与「字符集」没有直接的关系。
所以说,文件中保存的是编码,这也是「打开文件时需要使用正确字符集」的原因。当打开文件中,读取到的实际上是「编码」,「编码」解析为「码位」,由「码位」找到对应的「字体」。
相关链接
How are character encodings related to fonts? Wikipedia/Code point Wikipedia/Character encoding What’s the difference between a character, a code point, a glyph and a grapheme? Character encodings: Essential concepts Unicode Consortium 字体编辑用中日韩汉字Unicode编码表 Unicode与JavaScript详解 字符编码笔记:ASCII,Unicode 和 UTF-8[……]

READ MORE

「Xft」- X Font library

参考文献
freedesktop.org/Xft: https://freedesktop.org/wiki/Software/Xft/ Wikipedia/Xft: https://en.wikipedia.org/wiki/Xft[……]

READ MORE

「Font」- 字体安装、字体工具安装

该部分笔记及子章节记录:与字体、字符集有关的工具。[……]

READ MORE

「AAlib」- 将图形转化为字符画

参考文献
Homepage: http://aa-project.sourceforge.net/aalib/[……]

READ MORE

「FIGlet」- 安装

FIGlet,使用普通文本来制作大的文本字体。

# figlet -w 120 -f small w w w . d 3 r m . o r g
_ ____
__ __ __ __ __ __ __ __ __ __| | |__ / _ _ _ __ ___ _ _ __ _
\ V V / \ V V / \ V V / _ / _` | |_ \ | ‘_| | ‘ \ _ / _ \ | ‘_| / _` |
\_/\_/ \_/\_/ \_/\_/ (_) \__,_| |___/ |_| |_|_|_| (_) \___/ |_| \__, |
|___/

类似还有 TOIlet 程序,并且兼容FIGlet,并且支持彩色、Unicode、多种格式输出。
安装命令
从发行版的源中安装

#!/bin/bash

# Kali GNU/Linux Rolling
apt-get install figlet

使用源码编译安装

#!/bin/bash

# 1. 从Github上下载源码,Github Repo: https://github.com/cmatsuoka/figlet

# 2. 进入源码目录

# 3. 构建、编译、安装
make && make install

# 注意:有关编译前的配置,参考源码目录下的README文件。

安装的可执行程序
chkfont,用于检查字体文件的格式是否正确。
figlet,主程序文件,使用普通的字符来创建大字符字。figlet 文件是源码中编译的得到的,而某些发行版中figlet指向了alternatives,而figlet-figlet为原程序文件。
figlist,用于显示figlet的font文件和control文件。
showfigfonts,SHELL脚本。显示可用的figlet字体列表。
相关资源
FIGlet fonts: https://github.com/cmatsuoka/figlet-fonts
PHP Text Figlet: http://pear.php.net/package/Text_Figlet
参考文献
Homepage:[……]

READ MORE

「Fontconfig」- 安装(通常无需安装)

Fontconfig,软件包,包含用于配置和自定义字体访问的库和支持程序。
从发行版的源中安装

# Kali GNU/Linux Rolling
apt-get install fontconfig

使用源码编译安装
参考BLFS/Fontconfig-2.12.1: http://www.linuxfromscratch.org/blfs/view/7.10/general/fontconfig.html
安装的可执行程序
fc-cache,用于创建字体信息的缓存,该缓存用于加快应用对字体的处理。
%cachedir%/*-%arch%.cache-%version%,由 fc-cache命令生成的缓存文件,该文件中包含了字体文件名到字体属性的映射。这些文件在应用程序启动时,当应用需要定位适当的字体时,由 fontconfig 库加载。在 Kali GNU/Linux Rolling 中,这些文件位于/var/cache/fontconfig 目录中。
fc-cat,用于读取字体信息缓存。
fc-list,列出系统中所有可用的字体。
fc-pattern 用于解析模式(默认为空模式),并显示已解析的结果。
fc-query,用于查询字体文件并打印结果模式。
fc-query查询那些使用标准 fontconfig 规则的字体文件,并为每个找到的Family而打印出字体模式。如果给出 –index,则只查询文件的一个 Family,否则显示多有的 Family。
fc-scan,用于扫描字体文件和目录,并打印生成的模式。
fc-validate,用于验证字体文件。
fc-match – match available fonts
用于匹配可用字体,或者查找满足条件的字体。
-a,显示最匹配字体的排序后列表,不做任何的修剪处理。 -s,显示最匹配字体的排序后列表。 -v,打印每个匹配的字体的更详细的输出,或者是只打印提供的元素。 -f,根据format指定的格式进行输出。 pattern,显示匹配pattern的字体。默认为空。 element,如果设置了,则显示匹配字体的指定元素。比如:lang、family -V,显示版本信息。 -h,显示选项摘要。
参考文献
Fontconfig-2.12.1 BLFS / Fontconfig: http://www.linuxfromscratch.org/blfs/view/stable/general/fontconfig.html Homepage: https://www.freedesktop.org/wiki/Software/fontconfig/ Linux字[……]

READ MORE

「TOIlet」

TOIlet,使用普通文本来制作大文本。
类似于FIGlet,但是功能更多一些,并且兼容FIGlet,并且支持彩色、Unicode、多种格式输出。
参考文献
Homepage: http://caca.zoy.org/wiki/toilet[……]

READ MORE

「Font」- 3.Problem Solving (how-to)

XLFD – X Logical Font Description
X Logical Font Description: https://wiki.archlinux.org/index.php/X_Logical_Font_Description Wikipedia/XLFD: https://en.wikipedia.org/wiki/X_logical_font_description
Unifont
Intlfonts
Graphite
Free UCS Outline Fonts
Fontutils
Fontopia[……]

READ MORE

「Font」- 设置 Fallback 字体(如果字体 A 中不存在某个字符,则从字体 B 中加载该字符)

问题描述
我们常用的字体有 Microsoft YaHei、Courier 10 Pitch、Consolas 等等,虽然这些字体可以正确显示中文以及英文,但是却无法显示 Emoji 表情,因为这些字体中并没有 Emoji 表情的字体(其实 Courier 10 Pitch 连中文字体都不支持)。当没有特定字体时,该字符将显示为方块(注意“没有字体”与“乱码”这两者的区别)。
此时,我们就需要设置“备用(Fallback)字体”,即:当字体 A 中没有某个字符时,从字体 B 中加载该字符。
该笔记将记录:在 Linux 中,如何设置备用(Fallback)字体,以及常见问题处理。
解决方案
在 Linux 中,设置字体需要通过 Fontconfig 完成。该程序无需自行安装,因为它是在图形界面下必须的应用,默认已经安装。
我们的配置,也是围绕 fonts.conf 文件。对于入门学习,阅读 Font configuration – ArchWiki 页面。更多详细内容,参考 man 5 fonts.conf 手册。
作为普通用户,建议修改 $XDG_CONFIG_HOME/fontconfig/fonts.conf(通常为 ~/.config/fontconfig 目录)配置文件。
如下配置,默认使用 Courier 10 Pitch 字体,如果某个字符不存在,则将在 Microsoft YaHei 字体中需找该字符对应的字体:

<?xml version=”1.0″?>
<!DOCTYPE fontconfig SYSTEM “fonts.dtd”>
<fontconfig>
<alias>
<family>sans-serif</family>
<prefer>
<family>Courier 10 Pitch</family>
<family>Microsoft YaHei</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>Courier 10 Pitch</family>
<family>Microsoft YaHei</family>
</prefer>
</alias>
<alias>
<family>monospace[……]

READ MORE

「Fontconfig」- fonts.conf(学习笔记)

参考 Font configuration – ArchWiki 页面。
fonts.conf,字体配置文件。
配置文件路径及加载顺序(SYNOPSIS)
/etc/fonts/fonts.conf /etc/fonts/fonts.dtd /etc/fonts/conf.d
$XDG_CONFIG_HOME/fontconfig/conf.d $XDG_CONFIG_HOME/fontconfig/fonts.conf
~/.fonts.conf.d ~/.fonts.conf
配置文件描述(DESCRIPTION)
Fontconfig是一个库,旨在提供系统范围的字体配置、定制、应用程序访问。
功能概览(FUNCTIONAL OVERVIEW)
Fontconfig contains two essential modules, the configuration module which builds an internal configuration from XML files and the matching module which accepts font patterns and returns the nearest matching font.
FONT CONFIGURATION
The configuration module consists of the FcConfig datatype, libexpat and FcConfigParse which walks over an XML tree and amends a configuration with data found within. From an external perspective, configuration of the library consists of generating a valid XML tree and feeding that to FcConfigParse. The only other mecha‐ nism provided to applications for changing the running configuration is to add fonts and directories to the list of application-provided font files.
The intent is to make font configurations relatively static, and shared by as many applications as possible. It is hoped that t[……]

READ MORE

「Font」- 编程字体

问题描述
该笔记将记录:与编程字体有关的内容,以及我们使用过的字体。
解决方案
访问 Programming Fonts – Test Drive 站点,以查看并下载自己喜欢的字体。
我们使用的编程字体
Courier 10 BT / Courier 10 Pitch(正在使用)
# 09/19/2017 在我们的编程字体中,英文使用 Courier 10 BT 字体,中文使用 Microsoft YaHei 字体(我们使用 Fontconfig 进行配置,使其作为 Fallback 字体)。
# 10/25/2017 在 Java 环境中,由于目前 Java 环境中的字体实现未使用系统的 Fontconfig,而是需要修改 fontconfig.properties 文件,但是字体还是相同的。
# 02/06/2021 我们补充字体截图,但是使用 Courier 10 Pitch 字体。我们感觉 Courier 10 Pitch 更加“饱满”,感官效果更好,而 Courier 10 BT 更“锋利”。

Monaco
# 02/07/2021 Monaco 字体也不错,它是 OS X 系统默认字体。

Nimbus Mono L
# 02/17/2020 在 Debian 10 中(当然与操作系统无关),发现 Nimbus Mono L 字体,它与 Courier 10 Pitch 相仿,但是更细。我们觉得看起来有点累眼睛,所有就没有再尝试(也许是字体)。加粗的效果会好一些,但是相比 Courier 10 Pitch 字体,Nimbus Mono L Bold 太过显眼。

STZhongsong, 华文中宋
# 02/06/2021 我们特别喜欢 STZhongsong 字体的英文字母,每个字母都有 “棱角”、“方方正正”、“规规矩矩”。但是,长时间的仔细看还是有点别扭,不是很适合编程(不适合我们使用)。

其他字体(Others)
我们也尝试过其他字体,但是那种风格都是我们喜欢的类型,我们还是喜欢 Courier 10 Pitch 字体。
Ubuntu font madmalik/mononoki: a programming typeface
我们的字体大小
14pt
如果想显示更多的内容,我们建议换显示器。不要通过减小字体大小的方式,这只会损害视力。
常见问题汇总
苹果电脑使用的是什么字体?
The font you see in most places on Mac OS X is Lucida Grande, it is the system font in OS X 10[……]

READ MORE

「Font」- 合并两种字体

解决方案
通过 fontforge 命令,能够进行字体合并。
第一步、安装工具
BLFS / FontForge-20160404: http://www.linuxfromscratch.org/blfs/view/7.10/xsoft/fontforge.html Homepage: http://fontforge.sourceforge.net/ FontForge 与字体设计: http://designwithfontforge.com/zh-CN/index.html Documentation: http://fontforge.github.io/en-US/documentation/
FontForge,包含一个轮廓字体编辑器,可以创建自己的postscript,truetype,opentype,cid-keyed,multi-master,cff,svg,bitmap(bdf,FON,NFNT)字体,或者编辑现有的字体。
从发行版的源中安装

apt-get install fontforge

使用源码编译安装
参考BLFS/FontForge-20160404: http://www.linuxfromscratch.org/blfs/view/7.10/xsoft/fontforge.html 或者 Installing FontForge from Git Source Code: https://github.com/fontforge/fontforge/blob/master/INSTALL-git.md
安装的可执行程序
fontforge,is a program that allows you to create and modify font files. fontimage,is a program that produces an image showing representative glyphs of the font. fontlint,is a program that checks the font for certain common errors. sfddiff,is a program that compares two font files.
第二步、合并字体
准备要合并的两种字体
这里以Courier10 BT和Microsoft YaHei为例。
请自行下载两种字体。其中Courier10 BT提供英文字符显示,而Microsoft YaHei提供中文显示。
创建字体合并脚本

# 一下为脚本内容,脚本名为:

# Courier字体
# 其中courier.ttf,为字体[……]

READ MORE

「Font」- 常见错误汇总

字体显示为方块
Ubuntu 20.04 Text Not Displaying Properly Ubuntu 20.04 only shows half text
针对我们的场景:我们复制 $HOME 下的数据到新主机,而字体并未复制。这就导致当新主机启动时,找不到配置的字体而显示方块。
解决方案:安装 gnome-tweak-tools 工具,并在其中修改字体(界面字体显示为方块,我们只能凭借记忆找到字体设置)。
如果某些应用依旧无法正常显示字体,则通常是因为应用程序能够自定义字体。[……]

READ MORE

「Linux Desktop」- 在 Docker 中,运行桌面应用(解决依赖问题)

问题描述
我们使用 Debian 发行版,但是某些软件只能用于 Ubuntu 系统,或者其他 Linux 发行版(比如向日葵远程控制)。
我们可以通过 Chroot 模拟环境(环境制作繁琐),或者通过 Docker 来解决该问题。
该笔记将记录:在 Debian 10 中,通过 Ubuntu 18.04 Docker Image 来运行 XTerm 程序。
解决方案
第一步、创建 Dockerfile 文件

FROM ubuntu

RUN apt-get update -y && apt-get install -y x11-apps xterm

第二步、构建镜像

docker build -f Dockerfile.xterm -t xterm-within-docker ./

第三步、启动容器以运行程序

docker run –rm –net=host –env=”DISPLAY” \
–volume=/run/user/1001/gdm/Xauthority:/root/.Xauthority:rw \
xterm-within-docker \
xterm

注意事项,各个发行版创建的 /run/user/1001/gdm/Xauthority 路径各不相同,可以使用以下命令进行确定:

printenv XAUTHORITY

因此 docker run 命令可以改写为:


–volume=$(printenv XAUTHORITY):/root/.Xauthority:rw

第四步、验证当前终端为容器内

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION=”Ubuntu 20.04.1 LTS”

我们的系统为 Debian GNU/Linux 10 (buster) 而输出为 Ubuntu 20.04.1 LTS 表示成功。
应用案例
如果仅仅能够在 Docker Container 中运行 Xterm 是没有意义的,我们有以下应用场景: 1)我们需要在 Debian 10 中运行 应用,但是无法满足依赖关系。我们通过该方法解决这一问题:Sunlogin
参考文献
Running GUI apps with Docker | Fabio Rehm’s Blog Running GUI Applications inside[……]

READ MORE

「Linux」- 修改屏幕的分辨率

# 查看所有显卡
# lshw -C display
# 安装驱动
「Install NVIDIA GPU Drivers on Kali Linux」 「Ubuntu Linux Install Nvidia Driver (Latest Proprietary Driver)」
TODO 安装英伟达驱动
# 查看显示器支持的分辨率
「How can I get the monitor resolution using the command line?」 「How can I list the available video modes for my screen?」 「How do I change the screen resolution using Ubuntu command line?」
# 如何持久化设置的模式
「How to debug xrandr not setting up the desired resolution?」 「How can I make xrandr customization permanent?」
# gtf 1920 1080 60 # cvt <h-resolution> <v-resolution> [refresh]
# vim /etc/X11/xorg.conf
# 生成xorg.conf文件
「How to make an xorg.conf file」 「How to create xorg.conf」
# nvidia-xconfig
# Xorg :1 -configure # cp /root/xorg.conf.new /etc/X11/xorg.conf
相关链接
xrandr: where does VIRTUAL1 output come from?[……]

READ MORE