2018年11月11日 星期日

在 Acer One 10 (S1003) 上安裝 ezgo

上週拿到一台類變型金剛的小筆電,主人請我在上面裝 ezgo,因為他「受不了 win10 了」,一整個慢到爆。

(啊,不小心露點了~)

宏碁的 Acer Switch One 10 (S1003),外觀看不到 S1003 的型號,是進入原本 Win10 環境中才看到的。我花了一週左右研究,走了很多冤枉路之後,終於把它搞定了。



這裡紀錄一下發現與做法。

首先引用底下這篇文章裡的一句話:

Recommendations

Don't buy this tablet! It's not a good purchase. This post is for the users that made the same mistake as me.

如果你還在思考的話,不要買這一台!!
研究了一週之後,發現這類特規筆電,即使原生的 Win10 看起來也不是用最佳的效能在跑。

而且要試其他作業系統的話真的會變超難搞...

1. 開機

這台的開機用的是 32 位元 UEFI + Secure Boot。剛拿到這台筆電時,先用自己做的 ezgo 隨身碟試開機,結果發現系統連認都認不到。爬了文後才發現這台用的是 32 bit UEFI。Ouch! 原先的認知是 32 bit 沒有 UEFI,後來才知道便宜的平板多半使用這種模式

所幸 $4 大大先前做過類似的事,留下了這篇文。所以先在我自己的系統上安裝 grub-efi-ia32-bin 套件,然後對著做好的 ezgo 隨身碟做

$ sudo grub-install --removable --target=i386-efi --root-directory=<path_to_USB> /dev/<sdb>

就可以開到 ezgo live 模式了。

值得一提的是,我的 live 是跑 64 bit,原來的 win10 是 32 bit。雖然 UEFI 是 32 bit 但實際上跑 64 bit 的 Lubuntu/Kubuntu 都沒有什麼問題。換句話說原來 win10 用 32bit 其實是便宜行事... CPU 本身是支援 64 位元作業系統的。

然後,Acer 筆電最討厭的就是 Secure Boot 往往找不到如何關掉。Secure Boot 對 Ubuntu 影響很大,如果沒有關掉,連安裝 driver 時跑 dkms 都會卡住。

這次倒是誤打誤撞,在我不小心打開 Erase all Secure Boot Settings 後,它居然被我關掉了。


印象中之前處理的 Acer 筆電並沒有這個選項。無論如何,光是這個 BIOS 跟 Secure Boot 就已經讓我把 Acer 列在黑名單中了。

2. 硬碟

這台筆電裡沒有硬碟
什麼?沒有硬碟?
是的,沒有硬碟。因為它也是平板啊!實際上整個主機都藏在螢幕下,裡面只有兩張 SD 卡,沒有硬碟。這可能也是它跑 Win10 的效能更加杯具的原因之一。

不過,這裡衍生出一個問題。原先我試著把第一個 SD 卡的 Windows 保留下來,把系統安裝在第二張 SD 卡。結果順利安裝完成之後,卻發現開不了機。grub 的錯誤訊息顯示它找不到我的根分割區。

後來推斷,應該是第二張 SD 卡是外插。grub 啟動時,driver 還沒載入,對它而言第二張 SD 卡是不存在的。所以要把兩個系統都裝在第一個 SD 卡 (mmcblk0) 中才行。

(不過後來發生了一些意外,所以我很高興地別無選擇把 Win10 清掉惹。)

3. 無線網路

這是個有點悲情的部份。它的 wifi 是 Broadcom BCM43430 (14e4:43e2),但走的不是 PCI,而是 SDIO。

在第 N 次安裝時,我在 live 系統上照著這一篇說明把內建的無線網路啟動成功了(當然還有安裝像是 bcmwl-kernel-source 這類必要套件)。不過這第 N 次安裝也就是上述裝在第二張 SD 卡的那一次。

結果發現 SD 卡問題後,我要回到 win10 切割磁區,卻發現進不去了。推測可能是第 N-M 次安裝時不小心把開機磁區寫到 /dev/mmcblk0 去了。所以連 windows 也開不了了。

那好吧,我很高興地別無選擇把 Win10 清掉,重新分割再安裝 ezgo,mmcblk0 上切一個 efi 磁區跟根分割區,把第二張的空間都給了 home。

結果發現,此時我再也無法喚醒 bcm43430 了。開機時完全不會去找 sdio,firmware 也無法載入,安裝模組也沒有作用。試了一個早上之後決定放棄,直接接 USB wifi adaptor。

(李組長眉頭一皺,發覺案情並不單純。難道在原來 Windows 的分割區中藏了什麼嗎?為何清掉原來的分割區後會連 SDIO 都找不到呢?)

4. 顯示

這部份是花我最多時間的。一個禮拜大概有一半以上都在這個問題上打轉。因為這台平板筆電的解析度:1280x800,並不在 VBE (Vesa Bios Extension) 規範內。

在前面發現 32 bit UEFI 問題,並看過 $4 大大的文章後,想說既然 grub 檔要從 debian 拿,都要下載 debian-9.5-i386 的 iso 檔,那就乾脆裝 debian 吧!反正一樣可以裝 KDE 或 LXDE 等桌面系統。

用 unetbootin 把 debian-i386 裝進隨身碟,果然可以順利開機!可是......


哇咧,奇妙地躺了 90 度。我猜是因為平板預設模式的關係吧!進去隨身碟中的 boot/grub/grub.cfg 看看。


gfxmode=800x600,應該是它在作怪?不過解析度要怎麼設定呢?

grub 的手冊中有說明。於是我把它調整成 auto。


成功了!試了兩天以來繼 32 bit UEFI 後的第二個進展!按下去準備安裝!


解析度還是不對!再繼續啃 Manual,找到 gfxpayload 這個參數。所以在開機裡加上


答案是一點用處也沒有。

這裡應該卡了我三天吧!嘗試著找 vga= 的值所代表的意義(VBEsvga.txtvesafb.txt),不用 vga= 改用 video=1280x800x32 等,各種組合都嘗試了,但始終沒有成功。

這中間發現了一些好玩的功能,例如在 grub command line 中的 videoinfo 跟 videotest。要先 insmod videoinfo,所有 grub 可用的模組都放在隨身碟系統中的 boot/grub/i386-efi/ 中。

試了幾天準備放棄時,再回頭看 $4 大大的文章,最下面那一段發現原來用系統上的工具就可以加上 i386-efi ,決定再試一次。這次如第一段所述,直接對著 ezgo 做 grub-install,竟然就順利開到 live 模式了。

啊諾~


(此時狀態顯示為:想殺人)

嘗試用 xrandr 來解決。 xrandr -o right 向右轉 90 度。


成功了!終於可以好好安裝。

不過安裝完後,它預設抓的模式仍然是 800x1280,嘗試著改成 1280x800 結果是亂七八糟。所以只能讓它用 800x1280 再轉 90 度。但總也不能每次登入都手動調整吧!於是繼續爬文。透過 cvt 把 800x1280 的 Modeline 紀錄下來,再寫到 /usr/share/X11/xorg.conf.d/10-monitor.conf 中:

Section "Monitor"
        Identifier "DIP-1"
        Modeline "800x1280_60.00"   85.25  800 856 936 1072  1280 1283 1293 1327
 -hsync +vsync
        Option "Rotate" "right"
EndSection

Section "Screen"
        Identifier "Default"
        Monitor "DIP-1"
        SubSection "Display"
                Modes "800x1280_60.00"
        EndSubSection
EndSection

開機進入就自動轉過來了!

當然這樣做其實還有些問題,例如切到 console 時看到的還是倒過來的模式。不過一般使用至少正常了!

5. 結論

印象中之前有幾台 Transformer 要裝 ezgo 都裝不起來,我猜 32-bit UEFI 作梗的機率最高。不過這類筆電與平板二合一的,都是特規中的特規,然後看起來筆電模式其實都並沒有很好地運用硬體效能。目前這一台 Acer One 10 跑起 ezgo 來,我測是除了 wifi 要用 USB dongle 以外沒什麼其他問題,音效也正常。等筆電主人試過再評價囉!

2018年3月11日 星期日

強者我朋友的故事

最近看到一些討論,讓我想到一個強者我朋友的故事。

這個朋友從蠻久以前就是個車奴。其實說到車子,對我來說它就是個交通工具,當然我現在手上這台 TIIDA 也是我生活賺錢的重要夥伴。不過我除了一般保養,有問題時找認識的車廠維修,有時甚至自己想辦法搞定以外,我並沒有特別挑惕一定要哪個廠牌的車子,或是車子要能夠跑多快,外型有多炫,內部操作有多方便。我這台車已經為我服務了快廿七萬公里了。

而我這朋友則不一樣。他從可能二十幾年前吧,我們剛考上駕照那時,他就堅持一定要用某個廠牌的跑車。他也真的是有錢啦,而且不只是每週洗車,不管到哪裡他一定要開這台車去。隨著這台車一代又一代的推陳出新,他也真不吝嗇每出一代一定更換。

然後還有一件很妙的事。他不管到哪裡都要開車,即使是到 T 點(那裡其實有許多人三不五時都會要去那邊辦點事,不過到底是哪裡並不是重點,就讓我隱匿其名吧),他也堅持一定要開他那寶貝車。他常常跟我炫耀他開那台車只要三分鐘就可以到 T 點,然後問我幹嘛不跟他一樣弄一台跑車,多省時啊。

可是對我來說,去 T 點開車不一定好,主要是不好停車啦,我也不像他不是那麼忌誨停在非標準的停車格裡,(然後很神奇的在那邊的交警對他那款車好像也一向網開一面,我也不知道為何)所以我多半選擇坐公車去。

去那邊坐公車的話,要轉一次車,下車後再走個五分鐘吧,全程大約 30 分鐘。其實對我來說只要能到 T 點就好啦,但對強者我朋友而言怎麼到達那邊好像是件很重要的事。我有時也會跟他說坐公車也蠻有趣的啊,他偶而聽說公車換了內裝好像比較舒服,或是換了新車之類的,他也會跟我嘗試一下,但每次都是一樣的結果。他受不了三十分鐘的車程,受不了轉車加走路,有幾次幾乎要跟我翻臉。我這個人比較重視友誼(這不代表我會投票給侯友宜喔),所以後來我也就不特別邀他了,他喜歡開車就讓他開吧。我還是跟著我的老夥伴,偶而坐捷運、火車或公車去辦我的事。

然後最近出事了。原本他的車有一個很酷炫的功能,就是買車的時候必須跟原廠登錄指紋,並由原廠在車上植入一個秘鑰。這部車只能強者我朋友開,其他人開車的話,原廠就會用一個特殊暗號通知警察,好像叫海盜還是什麼的。我朋友原本也頗為自豪,但那一天這部車不知道哪裡不對勁,把我朋友認定成海盜啦!他的車不但不能開,還勞動到警察來看怎麼回事。

我朋友當然很生氣啊,他花了那麼多錢買的車,怎麼能說他是海盜呢?他打電話給原廠。原廠查看了一下,給了他一個回應:「我們這邊目前愛莫能助。有兩種可能性,一種是你的指紋跟我們這邊資料庫的對應不正確,可能是車內電腦的問題;另一種是我們這邊中控室認定你的車有問題,所以不讓任何人開。這些都不是現在可以解決的,要花上一段時間。」

我朋友很生氣地說:「我現在要去 T 點啊,我有很重要的工作,不去那邊那資料不行!現在我沒車開也不能去哪裡,你要我怎麼辦?」

原廠仍然給了他一個制式回應:"Sorry, There's nothing we can do."

他打電話來向我發洩了一頓,但我能怎麼辦呢?我說:「不然你那麼急的話就先坐公車去啊!」

不說還好,一說他好像更火大。「公車那麼 low 的東西,我才不坐!」

「好好好,不坐就不坐,不過我也不知道怎麼辦。或許你再買一台新的?」

我朋友就掛電話了。

後來我沒再追這件事。不過我內心總是祈禱著,希望我朋友不要一時衝動跑去偷別人的同款跑車,只為了去 T 點......

2017年9月3日 星期日

open ftp passive mode with ufw


ufw allow ftp

/etc/proftpd/proftpd.conf:
PassivePorts  50000   51000

ufw allow proto tcp from any to any port 50000:51000

2017年8月7日 星期一

Akademy 2017


Being absent in Akademy 2016, this year when starting calling for paper I almost immediately submitted two topics.  Fortunately two proposals were all accepted.  BTW, this time a young community friend also submitted a topic and was accepted, so I was no longer travelling alone.  Plus KDE and The Document Foundation are partners now, being a member of both KDE e.V. and TDF it was my honor to be the bridge between the two important community.

This time the travel was not as twisted as in 2015.  We arrived Almeria smoothly and met Lydia in the bus to the hotel!  It was a happy time meeting old and new friends and that's supposed to be the fun of having open source conferences.

In this year I had a long and a short talk.  The long talk was about customizing Kubuntu 16.04.  The way I used to customize Kubuntu 14.04 was almost useless in 16.04, which made me very frustrated.  I used to call for help in mailing lists and IRC channels but didn't get too much help.  So in my talk, I listed some important issues like the environment variables of XDG menu specs were of no use in Plasma 5, and the configuration structure in Plasma 5 was totally different but no enough documents available.  I have to say that, face to face communication is really good because we can see the problems and discuss together.  After my talk some issues were confirmed and I got to know the new "look-and-feel packages" way to customize.

In another short talk it was about Calligra suite.  In these two years I mainly work on helping the Taiwan's governments to adopt ODF and LibreOffice.  Since an important advantage of using open standard is that users will have different choices for software, I hope that Calligra can be improved especially for the CJK issues so that users in Taiwan can have more choices.

In the BoF session I helped Gabriele Ponzo and Xisco Fauli, who were from TDF to register BoF sessions talking about the LibreOffice community and announcing the release of LibreOffice 5.4.  I also registered one talking about to form a total solution composed with free software, for public administration in all the countries.  Being an excellent desktop environment KDE can and should play an important role in it.

Another important issue I raised in the "Ask us everything" sessions of  KDE e.V. board members was the member electing system we are using now.  I was elected as a KDE e.V. member as well but these years I keep wondering if it is an appropriate system.  Someone apply for e.V. member because he contributed to KDE and would like to get involved more.  Why should he get a certain number of current members to agree?  Besides, in this system the "+1" scheme is problematic too.  I hope that we can together discuss and think about the member system more to improve it.

Though the time was short but I really had a great time in Akademy 2017.  Wish to see you all in Vienna next year!



2017年7月9日 星期日

convert pdf to CMYK

把 pdf 檔改成 CMYK

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK \
-sOutputFile=output.pdf input.pdf


確認圖檔或 PDF 檔的 color profile
identify -format '%[colorspace]' [input-file]

2017年5月29日 星期一

openvpn


被搞好幾次囉

1. install openvpn, easy-rsa
2. vars 修改,. ./vars
3. build-ca
4. build-key-server <server_name>
5. build-dh
6. build-key <client_name>
7. openvpn --genkey --secret ta.key



https://openvpn.net/index.php/open-source/documentation/howto.html#examples
server/client config example

server 端:走 tcp, ta 打開 (0)

client 端:放 ca.crt, ta.key, <client_name>.* 到 openvpn 設定目錄內
走 tcp, ta 打開 (1)

重點:
防火牆打開

ufw allow 1194/tcp
ufw allow 1194/udp

/etc/ufw/before.rules 內最後面加上

## NAT table rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# Port Forwarding
-A POSTROUTING -s 192.168.95.0/24 -o ppp0 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
               

/etc/ufw/sysctl.conf 裡打開 net/ipv4/ip_forward=1

然後要把來自 tun0 的封包都預設 allow 不然 client 丟過去的 ip 不一樣就會被擋
ufw allow in on tun0

2017年2月26日 星期日

ezgo 使用者還原改寫為 systemd 系統


因為從原本的 SysV 改成 systemd,結果以前的使用者還原 script 全部要改寫。
研究了一下 systemd 的運作,終於改寫成功。

使用者還原:

產生兩個檔案:
/lib/systemd/system/multi-user.target.wants/recover_ezgo.service

內容:
[Unit]
Description=Recover user home contents #systemd service 的描述
Before=sddm.service #因為使用者家目錄的修改要在啟動 sddm 前做好,否則會出大亂子

[Service]
Type=oneshot
ExecStart=/usr/share/ezgo/recover/restore_ezgo.sh  #restore_ezgo.sh 是依據使用者選擇的帳號而產生

[Install]
WantedBy=multi-user.target


然後把它連結到 /etc/systemd/system/multi-user.target.wants/ 裡。這樣開機時就會在 sddm 執行 /usr/share/ezgo/recover/restore_ezgo.sh。

另外一個檔就是真正執行還原的,也就是 restore_ezgo.sh。裡面就是清掉家目錄的內容,再將先前備份的檔案放回去。


還原系統初始值:將家目錄整個砍掉重建,再把 /etc/skel 裡的內容放進去。
一樣放在開機時 sddm 執行前:

systemd 的部份要建立一個檔案: /lib/systemd/system/multi-user.target.wants/skel_ezgo.service

[Unit]
Description=Recover factory default for ezgo users
Before=sddm.service

[Service]
Type=oneshot
ExecStart=/usr/share/ezgo/recover/skel_ezgo.sh 

[Install]
WantedBy=multi-user.target

一樣把它連結到 /etc/systemd/system/multi-user.target.wants/ 中。這樣就能在 sddm 前執行。