2019年2月16日 星期六

Kindle 換字體

Kindle 官方在新版本的 Firmware 5.9.6 之後,正式讓用戶使用自訂的字型。
查一下自己的Kindle,Firmware Version: 5.10.2 (3374490058),已具有自訂字型的功能。

說明參見
Kindle自訂字型操作步驟與簡轉繁字型連結

NotoSansCJKTC思源黑體 多字重 簡轉繁
NotoSansCJKtc_CHS2CHT_V.05.6 (將一對一對應的簡體字替換成正體字型的檔案)

安裝字型
只要把檔案準備好、Kindle接好USB,把檔案存入 fonts 資料夾就可以了(根目錄下的fonts,不是system/fonts),接著打開一本KF8格式的書,點擊主選單的【Aa】就能看到自訂字型選項。

必須把格式轉成 AZW3 格式,即支援KF8標準。

原來的字體,類似細明,會有凸起,看起來不漂亮。


改成 Noto Sans CJK 字型後,比較舒服點。

Kindle/fonts/Readme.txt 中的說明

===============
10. 简体中文
===============

您现在可以将自己喜欢的字体安装到 Kindle 上,从而在阅读电子书时选用。

您安装的字体必须是 OpenType (OTF) 或 TrueType (TTF) 字体,而其他字体格式均不支持。此外,字体通常以字体集的形式可用,且每种字体可能包含数个不同的文件,分别为不同的字体样式。例如,常规、斜体、粗体,粗斜体等每种样式各为一个文件。我们建议您安装字体集所含的全部文件以获得最佳阅读体验。受支持的字体文件应具有以下扩展名之一:.ttf、.otf 或 .ttc 。

字体安装的具体步骤如下:

1. 若字体以压缩文件(如 ZIP 文件)格式打包,请用您喜欢的文件解压程序将文件解压缩

2. 将字体文件复制到 Kindle 上的“fonts”文件夹

3. 将 Kindle 从电脑上断开连接

4. 除 Kindle 字体外,您现在还可以选择自定义字体,从【显示设置】(Aa) 菜单中操作即可

从【显示设置】(Aa) 菜单中选择了自定义字体后,Kindle 将以该字体显示多数电子书的内容。如果某部书的内容不能以该字体显示,Kindle 将使用系统默认字体。这种情况发生的原因可能是该字体不支持书中的文字或该字体已损坏。

亚马逊尊重他人的知识产权。对于使用您上传到 Kindle 的任何字体,您都将负责确保已获得必要的授权和许可。使用 Kindle 上的字体上传功能,即表示您同意使用上传的字体不会侵犯或违反任何第三方的权益,并且对于因您使用上传字体所造成的任何索赔,您都将赔偿亚马逊的损失。

如需更多帮助,请访问:https://amzn.to/2rMrqOy

2019年2月3日 星期日

使用 xrdp 遠端登入 Linux (Gentoo)

想要遠端登入 Linux 的圖形界面,雖然可以使用 XDMCP 使用來,但是若想連到 firewall 後面的 Linux,則必須透過 Guacamole,然而 Guacamole 只支援 vnc 和 rdp 的圖形界面。依過去的使用經驗,vnc 的圖形界面用起來,不是很順暢。網路上有人開發 xrdp,可透過 rdp 的 protocol 來連線 Linux 的圖形界面,雖然它還是要借助於 vnc 的功能,但用起來比較方便。

使用摘要

要使用 xrdp,首先找到及下載 overlay,安裝 xrdp 及 xorgxrdp,啟動 service 後,再修改 home 目錄下的 .xinitrc,即可透過 rdp 連線,啟動自己想用的視窗環境。

安裝與討論

接下來討論自己安裝、使用、和測試所碰到的問題,以及解決的辦法,並且在確認後,反應給 overlay 的維護者。這主要是留作供自己參考,各位有興再看,沒空就跳過。

要安裝 xrdp,必須透過 overlay,我是自己建立自己用的 overlay。安裝後的提示,必須再裝 net-misc/tigervnc (要加上 use flag: server, xorgmodule ) 或 net-misc/x11rdp。不過,x11rdp 已不維護,請改裝 xorgxrdp。關於 xorgxrdp,於後討論。
 * Messages for package net-misc/xrdp-0.9.8:

 * Various session types require different backend implementations:
 * - sesman-Xvnc requires net-misc/tigervnc[server,xorgmodule]
 * - sesman-X11rdp requires net-misc/x11rdp 
在重新安裝系統時,安裝 xrdp 會自動拉進相關的 package。安裝 xorgxrdp 則必須先安裝  x11-base/xorg-server。

安裝以後,啟動 service。
# systemctl enable xrdp
# systemctl enable xrdp-sesman
# systemctl start xrdp
# systemctl start xrdp-sesman 
然後,可以下指令測試一下。
$ rdesktop -g 1024x768 localhost 
連線後,顯示登入的畫面

Session,選擇 Xvnc,登入後,會經由 /etc/xrdp/startwm.sh 啟動視窗,預設呼叫 /etc/X11/xinit/xinitrc,假若沒有設定環境變數 XSESSION,則會啟動 twm。
因此必須安裝 twm 才能測試。注意,至少要安裝 xterm,twm 才能成功啟動。

假若把 startwm.sh 改成直接執行  /usr/bin/startxfce4,則會出現下面的錯誤。
若是執行 openbox 或 icewm,則可以啟動。

本以為在 xrdp 中,無法使用 Xfce4,後來才察覺是因為在本機測試,本機的環境已是 Xfce4-session,導致無法再次啟動 一個 Xfce4-session,才出現上述錯誤。因為錯誤資訊找不到,在這上面轉了好多時間。

注意,使用 Xfce4,只能登入一次,不能本機和遠端同時登入。

後來,用遠端機器測試,就可以正常啟動 Xfce4 了。下圖是透過 Guacamole 登入 Linux 的畫面。


關於啟動 window manager 的判斷,測試 startx,確認 .xsession 及 .xsessionrc 沒有作用,.xinitrc 優先於 XSESSION。
根據此測試結果,針對 /etc/xrdp/startwm.sh 做了一些修正,修正後如下。
#!/bin/sh

# try hard to respect Gentoo's wm choice
. /etc/profile
[ -f /etc/rc.conf ] && . /etc/rc.conf
export XSESSION

userinitrc=$HOME/.xinitrc
if [ -f $userinitrc ]; then
    . $userinitrc
else
    . /etc/X11/xinit/xinitrc
fi

exit 1
這樣可以在自己的 .xinitrc 設定要啟動的 Desktop Enviroment,例如
#!/bin/sh

export LANG=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8

fbpanel &
# 注意 openbox 的後面不能接 & 
/usr/bin/openbox 

啟動 IceWM
#!/bin/sh

/usr/bin/icewm-session

或是呼叫 /usr/bin/startxfce4 啟動 Xfce4。這個修正和 overlay 的作者反應,已併入其中,自己以後就不用再修改了。

啟動 xfce4,.xinitrc 的內容如下

#!/bin/sh

exec dbus-launch --sh-syntax startxfce4

前面提到,xrdp 可以透過 xorgxrdp 來連線。經測試,使用 xorgxrdp,假如直接斷線而未登出,再連線會進入原來的連線狀態。或者,已經有一個連線,再以同一個 ID 進入建立新連線時,會關掉原來的連線。這就像在 Windows XP 之類的個人 OS 使用一樣。


不過這個透過 xorgxrdp 連線,折騰了好久才成功。

使用 xorgxrdp 無法登入的問題,可參考這個討論 [BUG/MITIGATION] XRDP/Xorg not starting correctly。意思為 /etc/xrdp/sesman.ini 中關於 [Xorg] 的設定,會呼叫 Xorg 指令,即 /usr/bin/Xorg,而其會呼叫 /usr/libexec/Xorg.wrap,而後者只允許 console users 執行。
$ setpriv --no-new-privs Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log
/usr/libexec/Xorg.wrap: Only console users are allowed to run the X server

$ Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log
/usr/libexec/Xorg.wrap: Only console users are allowed to run the X server

$ cat /usr/bin/Xorg
#!/bin/sh
#
# Execute Xorg.wrap if it exists otherwise execute Xorg directly.
# This allows distros to put the suid wrapper in a separate package.

basedir=/usr/libexec
if [ -x "$basedir"/Xorg.wrap ]; then
 exec "$basedir"/Xorg.wrap "$@"
else
 exec "$basedir"/Xorg "$@"
fi

$ ls -l /usr/libexec/Xorg*
-rwxr-xr-x 1 root root 2361128 12月 17 15:32 /usr/libexec/Xorg
-rws--x--x 1 root root   10296 12月 17 15:32 /usr/libexec/Xorg.wrap

修正,將 /etc/xrdp/sesman.ini 的 Xorg 改成  /usr/libexec/Xorg 即可順利啟動。
此項修正亦反應給原 overlay 的維護者,加入其 ebuild 中。

還有,使用 xrdp 從遠端連線,不需要啟動 gdm 或 kdm。

無法解除 Screen Saver 

當太久沒有動作時,進入螢幕保護時,會無法解除,不知如何是好。後來找到方法,從遠端登入,把 xscreensaver 殺掉即可。
$ ps -ax | grep save
17209 ?        S      0:00 xscreensaver -no-splash
19226 pts/1    S+     0:00 grep --colour=auto save
ajax@gentoo-tst ~ $ kill 17209


CentOS 設定

CentOS 的設定相對簡單,只要安裝,啟動後即可。但它的 Xrdp 只開 XVnc,必須修改 /etc/xrdp/xrdp.ini。

;   
; Session types
;   

; Some session types such as Xorg, X11rdp and Xvnc start a display server.
; Startup command-line parameters for the display server are configured
; in sesman.ini. See and configure also sesman.ini.
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000
; Disable requested encodings to support buggy VNC servers
; (1 = ExtendedDesktopSize)
#disabled_encodings_mask=0
; Use this to connect to a chansrv instance created outside of sesman
; (e.g. as part of an x11vnc console session). Replace '0' with the
; display number of the session
#chansrvport=DISPLAY(0)

修改後,重新啟動 xrdp 即可。


在 Ubuntu 使用

Ubuntu 20.04 LTS,直接下指令 apt-get install xrdp 即可。但 login 後,/etc/xrdp/startwm.sh 是呼叫 /etc/X11/Xsession 決定要啟動何者視窗。

因此下指令 echo "xfce4-session" > ~/.xsession,再用遠端桌面登入即可。


網誌存檔