2019年3月24日 星期日

使用 docker + py-kms 搭建KMS服務器激活環境

若在 image 裡加裝 git,會增加大約 50MB 的大小。因此,事先下載 py-kms 的程式,再 copy 到 image 裡。
$ git clone https://github.com/SystemRage/py-kms.git

使用 CentOS 的 Dockerfile
FROM centos:centos7.6.1810

RUN yum -y install epel-release && \
    yum -y install \
           python36 python36-setuptools && \
    yum clean all && \
    rm -rf /var/cache/yum && \
    easy_install-3.6 pip && \
    pip3 install tzlocal && \
    pip3 install pysqlite3 && \
    rm -rf /root/.cache

ADD ./py-kms/py3-kms /app

WORKDIR /app

# Microsoft's KMS port
EXPOSE 1688

CMD ["python36", "server.py"]
可以使用 Python3 的 image,但實在太大了,有 900多MB。若使用 jfloff/alpine-python:3.6-slim 的 image,則可降到 100MB 以下,其 Dockerfile 如下
FROM jfloff/alpine-python:3.6-slim

RUN pip3 install tzlocal && \
    pip3 install pysqlite3 && \
    rm -rf /root/.cache && \
    touch /requirements.installed

ADD ./py-kms/py3-kms /app

WORKDIR /app

# Microsoft's KMS port
EXPOSE 1688

CMD ["python3", "server.py"]

docker-compose.yml 的內容
py-kms:
  build: .
  ports:
    - 1688:1688
建立 image 及 執行
$ docker-compose build
  
$ docker-compose up -d

測試結果
# docker exec -it py-kms-server_py-kms_1 bash

[root@d5bc8bfc000f app]# python36 client.py localhost
Client generating RPC Bind Request...
        Server receiving
Client sending RPC Bind Request...    ===============>
        Server sending
Client received RPC Bind Response !!!    <===============
RPC Bind acknowledged !!!

Client generating Activation Request dictionary...
Client generating Activation Request data...
Client generating RPC Activation Request...
        Server receiving
Client sending RPC Activation Request...   ===============>
        Server sending
Client received Response !!!     <===============
Activation Done !!!
大概如此

有人使用 python 的 image 來建立,但 size 太大了,各 image 大小比較
  • jfloff/alpine-python:3.6-slim: 83.7MB
  • CentOS7+Python36: 275MB
  • CentOS7+Python36+git: 329MB
  • Python3: 929MB

執行認證
slmgr -skms 172.16.16.15
slmgr -ato
測試看成不成功

2019年3月18日 星期一

LARAVEL 5 使用 DB-RAW SQL搭配 PAGINATION 自動分頁功能

參考網頁
LARAVEL 5 使用 DB-RAW SQL搭配 PAGINATION 自動分頁功能

原始的簡單作法

要取得分頁的資料,可以使用 query builder。
$data = DB::table('projects')
    ->groupBy('id')
    ->orderBy('id', 'asc')
    ->paginate(15); 
但在線上資料有如下的提示
Note: Currently, pagination operations that use a groupBy statement cannot be executed efficiently by Laravel. If you need to use a groupBy with a paginated result set, it is recommended that you query the database and create a paginator manually.

上面的查詢,可改成直接用 SQL 指令的查詢如下。
$sql = "SELECT * FROM projects
        GROUP BY id
        ORDER BY id ASC";

$query = DB::select($sql); 
依照網頁的說明,原始的 SQL 指令,可以自行使用分頁函式來建立分頁資料
Sometimes you may wish to create a pagination instance manually, passing it an array of items. You may do so by creating either an Illuminate\Pagination\Paginator  or   Illuminate\Pagination\LengthAwarePaginator  instance, depending on your needs.

自己建立分頁資料的作法如下

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator; 

$query = DB::select($sql);
$page = Paginator::resolveCurrentPage("page");
$perPage = $count; // 實際每頁筆數
$offset = ($page * $perPage) - $perPage;

$data = new LengthAwarePaginator(
    array_slice($query, $offset, $perPage, true), 
    count($query), 
    $perPage, 
    $page, 
    ['path' =>  Paginator::resolveCurrentPath()]
); 
其中 DB::select() 函式會回傳整個查詢結果。
$query = DB::select( DB::raw($sql) ); 
然後,再用 array_slice() 擷取對應該 page 的資料列。
array_slice($query, $offset, $perPage, true)

$data 就是整個查詢出來的data。

使用 MSSQL 的 cursor 的作法

上述作法,因為 DB::select() 會傳回所有的資料,會使得效率較差。例如 64,679 筆資料,要花 1.7秒左右,假如使用 SQL 2008 的 cursor,只取回所需的 10筆,大約只要 0.2秒左右。

另外,上述程式中取得 page 和 url 的作法,在只使用 Laravel 部分 component,而不是使用 Laravel framework 的情況時,無法無法正常運作,因此改用 Request 的作法。

$pdo = DB::connection()->getPdo();

$stmt = $pdo->prepare($sql, [
    PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
    PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_STATIC
]);

$stmt->execute($param);

// Get the total number of rows returned by the query.
$totalCount = $stmt->rowCount();
$perPage = $count; // 實際每頁筆數
$page = $page = trim(Request::input('page', '1'));
$offset = ($page * $perPage) - $perPage;
$rows = array();

$i = 0;
while($row = $stmt->fetch(
    PDO::FETCH_ASSOC,
    PDO::FETCH_ORI_ABS,
    $offset + $i
)) {
    // dump($row);
    $rows[] = ($row);
    $i++;

    if ($i >= $pPageRows) {
        break;
    }
}

$stmt = null;

$data = new LengthAwarePaginator($rows, $totalCount, $perPage, $page,
    ['path' => Request::url()]); 


2019年3月17日 星期日

機械鍵盤加裝小紅點,資料收集

IBM 推出的在鍵盤上具有 trackpoint 的 Thinkpad 筆電和鍵盤,在寫程式或文章時,很好用,雙手不用離開鍵盤,當然,打電動還是滑鼠吧。因為那個 trackpoint 的頂帽是紅色的,所以叫 "小紅點",中國大陸叫指點桿。我平常都用桌機,因此外接小紅點鍵盤是我最常使用的生產工具之一。

六列式剪刀腳的外接 USB 小紅點鍵盤 (ThinkPad USB keyboard with trackpoint),有三種型式,SK-8835、 SK-8845、SK-8855。我從第一把用到第三把,尤其在 SK-8855 停產後,更是多買了好幾把來備用。

SK-8835 键盘推出時間為 2005年,從 THINKPAD T42、T43上移植下来的。在當時期待有小紅點的鍵盤已久,它一推出立刻去買一把,價格台幣 3千多元。後來同事也各買一把,但他們從來沒用那個小紅點實在可惜啊。這個鍵盤實在有夠大,右邊的數字鍵盤我完全沒用到,讓我沒地方擺滑鼠,真想把它切了。




SK-8845 是
在 2008 年推出,少了右邊的數字按鍵。因為那個數字鍵實在礙人,一推出立刻就去買了。但還有 touchpad,那個也很礙事,不小心會碰到,很想把它拔掉。後來是用紙板把它蓋住。


SK-8855 的推出時間為 2010年,2014年停產,也是最後的六列式剪刀腳小紅點外接 USB 鍵盤。後來的鍵盤行程變短就很難用了。

最後的 SK-8855 是我使用了好長一段時間的鍵盤,就為了那顆小紅點 (Trackpoint)。時常會心動想改用機械鍵盤,但少了那顆小紅點,就只好作罷。直到某天才知道那個小紅點模組 (Trackpoint module) 就是一個完整的 PS/2 滑鼠,就燃起了希望,可以自己搞定在機械鍵盤上加裝小紅點模組 (Mechanical keyboard with Trackpoint)。

對於小紅點模組,能得到的資料只有最早 IBM 公開的說明書。後來有不同的版本,有的還可以外接 touchpad。每個版本的外型和接腳都不一樣,各接腳的信號也不同。先搜集一下網路上的資料,多瞭解一些,比較保險,避免不小心損壞小紅點模組。

參考網頁


SK-8835 的基本資訊

SK-8835 和 SK-8845 是 IBM 早期推出的外接小紅點鍵盤,附有觸控板的小紅點鍵盤,它的鍵盤模組與下列筆電相容 IBM x30 x31 x32 T40 T40p T41 T41p T42 T42p T43 T43p r32 r40 R50 R50e R50p R51 R51e R51p R52 R52p

我後來使用最久的是 SK-8855,沒有觸控板,它的鍵盤模組與下列筆電相容 ThinkPad T400S T410 T410S T410i T420 T420S T420i T510 T510i W510 W520 X220 X220S X220T

在網路上可以搜集到一些模組的接腳說明,但不是很確定是手上的模組是那一種排列,先收集再來確認。




使用 Teensy 2.0 開發板連接 R40 模組的情形。


系統抓到的 SK-8855 資訊

瞭解 SK-8855 的軟體資訊。在 Linux 下,列出裝置 SK-8835 的資訊
# xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Synaptics Inc. Composite TouchPad / TrackPoint    id=22   [slave  pointer  (2)]
⎜   ↳ Synaptics Inc. Composite TouchPad / TrackPoint    id=23   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav System Control id=19   [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav    id=20   [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav Consumer Control   id=21   [slave  keyboard (3)]

USB 裝置看到的資訊
# lsusb
Bus 001 Device 019: ID 06cb:0009 Synaptics, Inc. Composite TouchPad and TrackPoint
Bus 001 Device 018: ID 04b3:3019 IBM Corp. 
Bus 001 Device 017: ID 04b3:3016 IBM Corp. UltraNav Keyboard Hub

找出它的 vendor id
# dmesg | grep -i synap
[  255.926699] usb 1-1.4: Manufacturer: Synaptics Inc.
[  255.930814] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:06CB:0009.000B/input/input28
[  255.930946] hid-generic 0003:06CB:0009.000B: input,hidraw9: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input0
[  255.933549] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.1/0003:06CB:0009.000C/input/input29
[  255.933726] hid-generic 0003:06CB:0009.000C: input,hidraw10: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input1
[ 4095.812773] usb 1-1.4: Manufacturer: Synaptics Inc.
[ 4095.822378] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:06CB:0009.000F/input/input33
[ 4095.822885] hid-generic 0003:06CB:0009.000F: input,hidraw9: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input0
[ 4095.826257] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.1/0003:06CB:0009.0010/input/input34
[ 4095.826755] hid-generic 0003:06CB:0009.0010: input,hidraw10: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input1
[ 4524.939148] usb 1-1.4: Manufacturer: Synaptics Inc.
[ 4524.944395] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:06CB:0009.0013/input/input38
[ 4524.944852] hid-generic 0003:06CB:0009.0013: input,hidraw9: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input0
[ 4524.948361] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.1/0003:06CB:0009.0014/input/input39
[ 4524.948903] hid-generic 0003:06CB:0009.0014: input,hidraw10: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input1
[ 4728.236457] usb 1-1.4: Manufacturer: Synaptics Inc.
[ 4728.240581] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:06CB:0009.0017/input/input43
[ 4728.240797] hid-generic 0003:06CB:0009.0017: input,hidraw9: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input0
[ 4728.243559] input: Synaptics Inc. Composite TouchPad / TrackPoint as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.1/0003:06CB:0009.0018/input/input44
[ 4728.243802] hid-generic 0003:06CB:0009.0018: input,hidraw10: USB HID v1.00 Mouse [Synaptics Inc. Composite TouchPad / TrackPoint] on usb-0000:00:14.0-1.4/input1

因為正在使用中,無法 unbind 裝置,所以無法使用 pyusb 傳送設定資料,就不繼續測下去了。

控制板選用

The Pro Micro is an Arduino-compatible microcontroller board developed under an open hardware license by Sparkfun. Clones of the Pro Micro are often used as a lower-cost alternative to a Teensy 2.0 as a basis for a DIY keyboard controller/converter when a lower number of pins would suffice.

Like the Teensy 2.0, it sports an AVR ATmega32u4 8-bit microcontroller which has an integrated USB controller. It has a micro-USB type B port (Teensy 2.0: mini-USB), 18 I/O pins (Teensy 2.0: 25 I/O pins) and an integrated voltage regulator for 3V operation.

基於前述說明,Teensy 2.0 的 pin 會多一些,可能比較好。
----------------------
目前使用的是 ThinkPad Lenovo 聯想 SK-8855 外接 USB 鍵盤,這個已經絕版。而現在機械鍵盤好像頗為熱門,可惜沒有加上小紅點 (trackpoint) 的鍵盤。

其實也變猶豫的,SK-8855 用起來還順手,是否要折騰自己改裝機械鍵盤,加上小紅點模組 (trackpoint module)。而自己在硬體改裝能力上,並不擅長,尤其機構,更是束手無策。另外,目前都採用薄膜電路,SMD 元件,連電子電路也動不了。

無論如何,先收集一下資料,再來研究一下可行性。

POKER改小紅點 TRACKPOINT MOD

小紅點控制板接線方式_存檔用

更新-POKER改小紅點 TRACKPOINT MOD-加上滾輪了

Topic: Looking for Trackpoint controller IC pinout

終於被我找到了,關鍵字 "x220 trackpoint module pinout","T400S T410 T410S T410i T420 T420S T420i T510 T510i W510 W520 X220 X220S X220T",用這些關鍵字去找。找到了下列幾個網站。


下面是鍵盤PCB板的連接情形

這個接頭是 Japan Aviation Electronics (JAE)  AA01B-S040VA1。這個是 0.4mm間距 40PIN 板對板連接器,有可能焊接嗎?



接頭的接點,是不可能焊接的,但轉個彎還是有解。轉換板上有3個測試點,對應到 3個信號。
TP1 => RST
TP2 => DAT
TP3 => CLK
接好後,經測試,OK 可以動作。但是一不小心,就把銅箔焊得掉下來了,好在那個是 reset 信號,有好多個接點可焊。焊好後,趕緊用膠布纏好,不敢再動它,以免全部泡湯。

Poor man's tex yoda
the module is from an x220 keyboard, of course in a 3D printed case. it's just connected to a PS/2 cable since that's what it outputs. it also has pins for the mouse buttons built in.
I'm on linux, so to speed up the pointer for my 4k monitor and get middle click scrolling, I run this:
xinput --set-prop "pointer:Barcode Reader " "libinput Scroll Method Enabled" 0 0 1
xinput --set-prop "pointer:Barcode Reader " "libinput Accel Speed" 1
you can get your PS/2 device with "xinput --list"
the switches are black complicated alps from an old keyboard. I used to have keycaps, but it interferes with the spacebar so I've left them off.

HHKBにトラックポイントを内蔵する方法 その4 - トラックポイントの設置
日本人的成品,機構 -- 搞電子的人的短板,最多只會做到用 AB膠黏。



Female connector from the front
Pin 1+DATAData
Pin 2Not connected[b]
Pin 3GNDGround
Pin 4Vcc+5 V DC at 275 mA
Pin 5+CLKClock
Pin 6Not connected[c]


硬派精璽 (in_pad) 賣家,在露天和Yahoo 拍賣上,有賣 TEX Yoda II DIY零組件|Trackpoint小紅點模組(含螺絲),一個 750 元。如下圖,其中一個鼠桿被我掰斷了。


在下面這個連結找到相關廠商,鈦思電子 (TEX),台北巿內湖路1段411巷21號,TEL: 02-2627-7372,不曉得能不能直接找它買那個延伸桿。

ThinkPad 25周年键盘小红点维修记录,這篇文在說键盘的小红点指点杆损坏了,变得松松夸夸,功能不正常。

網路上的改裝實例

網路上找到的改裝實例,參考一下別人怎麼改的


機械鍵盤的 Dimension
GH - B,兩排間距 20mm,Trackpoint 中心,離B的中心,11mm,就是偏上 2mm。

IMB trackpoint stem DIY

有人開發轉換板,使用 Thinkpad 的鍵盤

可惜,不知怎麼找到那個 转换板,连接转换板,有了那個才能接上鍵盤

Teensy 2.0 USB AVR 開發板

花幾千塊,買一個 SK-8855 來殺,只為了取得那個 USB 轉接板,成本實在太高了。網路上有人用 Teensy2.0USB AVR 開發板來接小紅點模組,這個開發板在網拍上用 360 元就能買到。

關鍵字是 "Teensy2.0USB AVR 開發板 鍵盤滑鼠ISP U盤實驗板 mega32u4 W177"。

下面是討論的連結
https://geekhack.org/index.php?topic=8971.msg775152#msg775152
https://github.com/Nephiel/tmk_keyboard/blob/master/tmk_core/protocol/ps2_mouse.c


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,再用遠端桌面登入即可。


2019年1月16日 星期三

CentOS + Vmware Workstation Server

因為在 Gentoo Linux 上,設定 Vmware Workstation Server 不太直接,決定在 CentOS 上裝,測試一下,問題在那。

分別測了 CentOS 6 和 7,裝好 CentOS 後,執行下列指令,以便順利安裝 Vmware Workstation Server。
yum update
yum groupinstall "GNOME Desktop"
systemctl set-default graphical.target
重新開機後,繼續安裝發展工具,以便裝 kernel module。

yum groupinstall "Development tools"
yum install kernel-headers
yum install kernel-devel

yum install epel-release
yum groupinstall xfce

chmod +x VMware-Workstation-Full-10.0.6-2700073.x86_64.bundle
./VMware-Workstation-Full-10.0.6-2700073.x86_64.bundle
==> 在 CentOS 7 下,無法執行,因為改成 systemd 的管理

vmware-installer -u vmware-workstation



# cat /usr/lib/vmware/hostd/docroot/client/clients.xml
<ConfigRoot>
  <clientConnection id="0000">
    <authdPort>902</authdPort>
    <version>6</version>
    <exactVersion>6.0.0</exactVersion>
    <patchVersion>1.0.0</patchVersion>
    <apiVersion>dev</apiVersion>
    <downloadUrl>@@HOSTCLIENT_URL_WIN@@</downloadUrl>
    <flexClientVersion>6.0.0</flexClientVersion>
  </clientConnection>
</ConfigRoot>

# chkconfig --list
Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole      0:off 1:off 2:off 3:off 4:off 5:off 6:off
network        0:off 1:off 2:on 3:on 4:on 5:on 6:off
vmware          0:off 1:off 2:on 3:on 4:off 5:on 6:off
vmware-USBArbitrator                 0:off 1:off 2:on 3:on 4:off 5:on 6:off
vmware-workstation-server 0:off 1:off 2:on 3:on 4:off 5:on 6:off

參考
https://slackblogs.blogspot.com/2015/04/vmware-workstation-10-on-linux-kernel.html

cp /usr/lib/vmware/modules/source/vmnet.tar /usr/lib/vmware/modules/source/vmnet_org.tar
tar xvf  /usr/lib/vmware/modules/source/vmnet_org.tar
vi vmnet-only/netif.c

vmnet-only/netif.c:468:7:
- dev->trans_start = jiffies;
+ netif_trans_update(dev);

tar cvf /usr/lib/vmware/modules/source/vmnet.tar vmnet-only/
vmware-modconfig --console --install-all

vmnet-only/netif.c:464:7: error: ‘struct net_device’ has no member named ‘trans_start’
    dev->trans_start = jiffies;

https://www.visibil.it/blog/2017/10/5/vmware-workstation-12-and-centos-7


https://www.unixmen.com/install-vmware-10-centos-7/
https://stackoverflow.com/questions/24921593/installation-of-vmware-workstation-10-0-1-on-centos-7
http://www.voidcn.com/article/p-ofiwnxuj-bmb.html
https://communities.vmware.com/thread/484273

vmware-modconfig --console --install-all

在 CentOS 7
目的,想用 ESXi client 來連
12 可以連上,必須用一般使用者身分

11
Vmware workstation 可以連上,netif.c 要改,exactVersion>6.0.0</exactVersion
ESXi client 不能連
32 bit guest 可以開,64 bit guest 不能開機

10
vmware-workstation-server 無法啟動,netif.c 要改

2019年1月8日 星期二

洋垃圾 Xeon E5-2660 使用

和小孩換來一套  Xeon(R) CPU E5-2660 的系統,使用華南 X79 主機板 V 2.47,原來跑得好好的,不曉得碰到什麼,就壞了,無法開機。無法確定只是主機板壞掉,或是 CPU 也壞了,只好上網先買一張新板子來試,若不行,就只好再買 CPU 了。

在露天花了一些時間搜尋,找到一定比較便宜,而且和原來的板子比較接近的產品。因為急著想知道結果,就直接約下班去當面交易。

新版的板子,比舊的好很多,支援 PCI-e 的 SSD,這樣我手邊多的 Intel 600P SSD 就能派上用場了。Intel 600P SSD 的 [連續寫入速度] 只有 560MB/s,可是 [連續讀取速度] 有 1775MB/s,是 SATA界面 SSD 的3倍,爽度 3倍。可惜,裝了散熱片後,和顯卡略干涉,只好挪顯卡。另外,USB 3.0 接頭的位置也改了,接線不用接得老遠。

新買的是華南 X79 主機板 V 2.49,它的手冊只有薄薄幾頁,可是已經比 V2.47 只有薄薄一張黑白印刷的說明書,進步很多了。雖然這板子用的人很多,要找說明書還真難找。這次就先把它掃描留存起來,以供日後參考。






Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz,顯示 16 個 threads,看起來就爽。不過是好幾年前的產品,效能不到 2018 年 CPU 的一半。像在 Gentoo 下,emerge 一個龐大的 package,如 sys-devel/llvm 或 dev-qt/qtwebengine,就要多一倍的時間。但也別太要求效能,這本來就是當初給伺服器用的,比較適合架站,同時跑多個 VM (Virtual Machine)。


網誌存檔