2019-12-23

Linux Mint (Ubuntu) 搬移系統到新硬碟、修復中文開機選單

先用Linux Mint的Live開機,然後用rsync對拷資料過去新硬碟(記得先格式化):
rsync -axHAWXS --numeric-ids --info=progress2 /old-disk/ /new-disk/

然後記得修改新碟碟中的/etc/fstab,對應正確的UUID,查UUID的方法:
blkid

Ubuntu搬移至新系統後,開機不正常一般可以用boot-repair來修復:
https://help.ubuntu.com/community/Boot-Repair

選擇reinstall grub就好,不需要purge grub,記得安裝位置及開機位置要選對(都選新碟碟)

開機進新系統後,再修復一下開機選單:
sudo update-grub
sudo update-initramfs -ukall

不過比較令人困擾的是若是選擇purge grub,
 memtest86+ 及中文開機選單會不見,因此必須重裝回來:

sudo apt-get purge memtest86+
sudo apt-get memtest86+ language-pack-zh-hant
sudo cp /usr/share/locale-langpack/zh_TW/LC_MESSAGES/grub.mo /boot/grub/locale/zh_TW.mo

Mint 19.3由於新增了開機佈景主題,還需修改一個地方,讓中文顯示正常:
sudo vi /etc/default/grub.d/60_mint-theme.cfg
修改為 GRUB_FONT="/boot/grub/fonts/unicode.pf2"

用locale檢查環境變數(或檢查/etc/default/locale),需為:
LANG=zh_TW.UTF-8
LANGUAGE=zh_TW:zh
若不是請到偏好設定/語言去修改,
或下指令:
sudo update-locale LANG="zh_TW.UTF-8" LANGUAGE="zh_TW:zh"
sudo dpkg-reconfigure locales
sudo locale-gen zh_TW.UTF-8

更新grub:
sudo update-grub

2019-12-19

SSH X11Forwarding在LInux Mint(Ubuntu)的設定

本機:
加-X表示啟用X11 Forwarding
ssh -X yourname@domain.com

遠端:
vi /etc/ssh/sshd_config
===============
X11Forwarding yes
X11UseLocalhost no
===============
sudo systemctl restart sshd.service

vi ~/.xprofile
===============
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMOIFIERS="@im=fcitx"
===============

vi ~/.profile
===============
source ~/.xprofile
fcitx -d &
===============

再重新登出登入,試試libreoffice,看看是否能正確顯示畫面跟啟用輸入法:
soffice --writer

Linux MInt 19 (Ubuntu 18.04) 使用指紋辨識

X61s的指紋辨識器型號是 UPEK/Thomson (0483:2016),可以被thinkfinger或fprint支援,以下安裝fprint

sudo apt install libpam-fprintd fprint-demo
fprintd-enroll //預設右食指,-f參數可指定手指(right-middle-finger, right-ring-finger)
pam-auth-update //fingerprint auth打勾
fprint_demo //測試辨識器是否正常

ref:
https://askubuntu.com/questions/511876/how-do-i-install-a-fingerprint-reader-on-lenovo-thinkpad
https://askubuntu.com/questions/1107755/fingerprint-reader-in-ubuntu-18-04
http://www.thinkwiki.org/wiki/How_to_enable_the_integrated_fingerprint_reader
http://www.thinkwiki.org/wiki/Integrated_Fingerprint_Reader

2019-12-16

X61/X61s + Linux Mint 19.2 (Ubuntu 18.04) 安裝 Crystal HD (BCM70015) 硬體解壓縮卡

最近淘了台ThinkPad X61s來懷舊,想說這2007年的硬體播放1080p影片可能不太行,於是花了NT.200買了個Broadcom Crystal HD (BCM70015)硬體解壓縮卡來玩玩,不過要注意的是,影片格式、解析度、比特率不能超過以下限制,否則影片透過硬解後可能會撥不出來:

H.264/AVC HP at L 5.1 1080p/1080i, 40 Mbps
SMPTE VC-1 AP at L 3 1080p/1080i, 40 Mbps
WMV9 (VC-1 SP and MP)
MPEG-2 MP @ ML and HL, 80 Mbps
DivX 3.11, 4.1, 5.X, 6.X, XviD

安裝環境:Linux Mint 19.2 (Ubuntu 18.04), kernel 4.18.0-25

0.因為X61/X61s是用GM965/GL960內顯,
因此先更新為最新i915 driver (xserver-xorg-video-intel)
(此步驟可不做,若opengl呼叫有問題,可試著更新內顯驅動):
sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt-get update
sudo apt dist-upgrade

1.先安裝crystalhd driver,可選擇用modprobe或dkms的方式:

先安裝必要工具:
sudo apt-get install checkinstall git-core autoconf build-essential subversion dpkg-dev fakeroot pbuilder build-essential dh-make debhelper devscripts patchutils quilt git-buildpackage pristine-tar git yasm zlib1g-dev zlib-bin libzip-dev libx11-dev libx11-dev libxv-dev vstream-client-dev libgtk2.0-dev libpulse-dev libxxf86dga-dev x11proto-xf86dga-dev git libgstreamermm-0.10-dev libgstreamer0.10-dev automake libtool python-appindicator 

modprobe方式:
git clone https://github.com/dbason/crystalhd.git
cd crystalhd/driver/linux
autoconf
./configure
make
sudo make install
cd ../../linux_lib/libcrystalhd/
make
sudo make install
sudo make -C firmware install
sudo modprobe crystalhd

dkms方式:
git clone https://github.com/dbason/crystalhd.git /usr/src/
mv /usr/src/crystalhd /usr/src/crystalhd-0.1
cd /usr/src/crystalhd-0.1/linux_lib/libcrystalhd/
make
sudo make install
dkms add -m crystalhd -v 0.1
dkms build -m crystalhd -v 0.1
dkms install -m crystalhd -v 0.1

cp -f /usr/src/crystalhd-0.1/driver/linux/20-crystalhd.rules /lib/udev/rules.d/ <--勿省略,以免非root使用者無法開啟設備

2.檢查crystal hd是否有正確載入driver:
lsmod | grep crystalhd
-> crystalhd 110592 0

dmesg | grep crystalhd
->...
->[810.638520] crystalhd 0000:02:00.0 Starting Device:0x1615

3.安裝smplayer, mpv, gstreamer1.0-crystalhd, libcrystalhd3
apt-get install smplayer mpv gstreamer1.0-crystalhd libcrystalhd3
(VLC測試撥放會說 buffer deadlock prevented 而失敗,因此改用smplayer+mpv)

4 .重開機,抓個測試影片來測試:
http://jell.yfish.us/media/jellyfish-40-mbps-hd-h264.mkv
直接先用mpv來撥放(其中--vo=可改gl, sdl, xv試試):
mpv --hwdec=crystalhd --vo=gl jellyfish-40-mbps-hd-h264.mkv
-> DtsDeviceOpen: Opeining HW in mode 0
-> Enable single threaded mode

使用smplayer透過mpv播放:
exit(離開root bash)
smplayer(開啟smplayer)
Options/Preferences/General
General/Multimedia engine: mpv

Options/Preferences/Performance
Allow frame drop 勾選
Allow hard frame drop 勾選
Performance/Decoding/Hardware decoding: crystalhd

再用smplayer播放 jellyfish-40-mbps-hd-h264.mkv
檢視選單 View/Mplayer/mpv log
看看是否有跟mpv播放一樣的log

或者改直接播youtube試試:
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl
mpv --hwdec=crystalhd https://www.youtube.com/watch?v=i0p1bmr0EmE

5.若要移除cyrstalhd driver, 可照以下步驟:
modprobe:
modprobe -r crystalhd

dkms:
dkms remove crystalhd/0.1 --all

不過最後發現i915內顯驅動似乎仍有問題,造成opengl輸出的buffer無法建立,因此1080p用硬解後mpv播放反而更卡...後來發現改用smplayer+mplayer播放超順!算了就這樣吧 囧

ref:
https://wiki.archlinux.org/index.php/Intel_graphics
https://gist.github.com/Brainiarc7/aa43570f512906e882ad6cdd835efe57
http://rocksaying.tw/archives/2015/Linux_DKMS_%E6%A9%9F%E5%88%B6%E5%B0%8E%E5%85%A5%E7%AD%86%E8%A8%98.html
https://kodi.wiki/view/Broadcom_Crystal_HD
https://www.pcdvd.com.tw//showthread.php?t=906270&page=1&pp=10
https://github.com/dbason/crystalhd
https://github.com/agx/libcrystalhd/blob/master/src/libcrystalhd_if.c
http://jell.yfish.us/
https://askubuntu.com/questions/1082499/how-to-get-and-install-intel-i915-drivers-on-ubuntu-18-04
https://wiki.archlinux.org/index.php/Mpv_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://mpv.io/manual/stable/#video-output-drivers

2019-11-10

安裝 VSCode + Golang 開發環境

1.安裝 golang-go:
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

2.設定環境變數GOPATH
vi ~/.profile
加入:
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
再執行:
source ~/.profile

3.建立 ~/go 資料夾,也就是剛剛設定的GOPATH路徑

4. VSCode安裝vscode-go套件:
https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go

按F1或 ctrl+ shift +p,執行 Go:install/update Tools,打勾所有工具並安裝

5.建立個專案資料夾,如~/go/src/hello,並在資料夾內寫一個hello.go,
並在terminal執行:
go build
./hello
或直接執行go run hello.go
看能不能正常執行

ref:
https://github.com/golang/go/wiki/Ubuntu
https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go
https://github.com/Microsoft/vscode-go/wiki

2019-10-19

Linux Mint 19 (Ubuntu 18.04) 設定VNC Server

以下以Linux Mint 19 XFCE (Ubuntu 18.04)為範例:

#安裝vnc4server套件及gnome桌面套件(遠端gnome桌面)
sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal vnc4server

若要使用xfce桌面,改安裝以下套件:
sudo apt-get install xfce4 xfce4-goodies vnc4server

#啟動vncserver,此時會要求輸入密碼,並建立~/.vnc/xstartup 連線初始化檔案
vncserver

#修改~/.vnc/xstartup 連線初始化檔案,選擇連線時桌面環境(請依系統桌面修改)
#!/bin/sh

#export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4 #xfce4桌面
#exec gnome-session #gnome桌面

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &

#以下為使用 gnome 桌面的額外設定
#gnome-panel &
#gnome-settings-daemon &
#metacity &
#nautilus &
#gnome-terminal &

#建立 ~/.vnc/config ,設定vncserver啟動參數,加入以下設定:
#localhost=no #設定對外部網路監聽
geometry=1920x1080 #設定解析度
alwaysshared #設定可多重連線

#新增 /etc/systemd/system/vncserver@:1.service,讓vncserver能自啟動
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
User=foo
Group=foo
#PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -geometry 1440x900 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill %i

[Install]
WantedBy=multi-user.target

#啟用、啟動、停止 vncserver.service
sudo systemctl enable vncserver.service
sudo systemctl start vncserver.service
sudo systemctl stop vncserver.service

#重開機後,檢查一下是不是port 5901有正常在所有網卡介面(0.0.0.0)監聽
netstat -tnlup

#vnc遠端連線測試:
sudo apt-get install vncviewer
vncviewer my-vnc-server-ip:5901
或用remmina連線 my-vnc-server-ip:5901 測試

ref:
https://askubuntu.com/questions/475023/how-to-make-vnc-server-work-with-ubuntu-desktop-without-xfce
https://wiki.archlinux.org/index.php/TigerVNC


2019-10-15

VirtualBox 5 安裝 macOS High Sierra

因為有跨平台開發的需求,所以Windows、GNU/Linux、macOS都習慣裝VM來做測試,其中以安裝macOS最麻煩...

就自已的經驗,用vmware安裝macos最穩定好裝,virtualbox裝macos則問題非常多,可以的話推薦用vmware,這裡用virtualbox裝只是想試試是否相容性有進少步(結果證明是自找麻煩)

以下為安裝High Sierra步驟,若要安裝Mojave或Catalina應該也行,只是VirtualBox的macOS預設最高版本只能選High Sierra,因此以安裝High Sierra為範例。

0.安裝VirtualBox及其extension pack:
https://www.virtualbox.org/wiki/Downloads

1.下載作業系統:
若在APP Store找不到你要的作業系統,可利用mas找出並下載曾經下載過的macOS:
https://github.com/mas-cli/mas

各版本代號如下:
macOS 10.7 Lion – 444303913
macOS 10.8 Mountain Lion – 537386512
macOS 10.9 Mavericks – 675248567
macOS 10.10 Yosemite – 915041082
macOS 10.11 El Capitan – 1147835434(適用無法升級10.12的舊機型)
macOS 10.11 El Capitan – 1018109117
macOS 10.12 Sierra – 1127487414
macOS 10.13 High Sierra – 1246284741

2.將作業系統APP轉為ISO檔:
假設作業系統APP已經下載應用程式中,執行以下指令:
hdiutil create -o /tmp/HighSierra.cdr -size 5530m -layout SPUD -fs HFS+J
hdiutil attach /tmp/HighSierra.cdr.dmg -noverify -mountpoint /Volumes/install_build
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/install_build
mv /tmp/HighSierra.cdr.dmg ~/Desktop/InstallSystem.dmg
hdiutil detach /Volumes/Install\ macOS\ High\ Sierra
hdiutil convert ~/Desktop/InstallSystem.dmg -format UDTO -o ~/Desktop/HighSierra.iso
mv ~/Desktop/HighSierra.iso.cdr ~/Desktop/HighSierra.iso
rm ~/Desktop/InstallSystem.dmg

此時桌面會產生HighSierra.iso,將它複製到要安裝VM的電腦上

3.新增VirtualBpx VM,作以下設定:

  • 新增虛擬機,名稱為MacOS,作業系統類型為 macOS 10.13 High Sierra (64-bit),動態硬碟至少60GB
  • 系統 > 主機版 > 開機順序,取消軟碟
  • 系統 > 主機版,至少4096mb記憶體
  • 系統 > 處理器,選擇2核心
  • 顯示 > 螢幕,設定128mb記憶體,2D/3D加速(要看你的電腦有無支援)
  • 儲存 > 儲存裝置確定為 SATA/AHCI,並掛載剛剛產生的作業系統iso檔
4.在終端機下執行以下指令(若在windows環境,需先進入VirtualBox安裝資料夾執行):
VBoxManage modifyvm "MacOS" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff
VBoxManage setextradata "MacOS" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3"
VBoxManage setextradata "MacOS" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "MacOS" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple"
VBoxManage setextradata "MacOS" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "MacOS" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

5.將VM開機,此時會從光碟開機,並進入安裝畫面,這邊開始就是重點:
先開啟磁碟工具,並將硬碟格式化成HFS+,千萬不要選APFS!
不然你的VM設定就要重來一遍了,因為VirtualBox 5不認識APFS, 裝了也只會是無法開機!
假設這裡你把硬碟取名為「Macintosh HD」

之後離開磁碟工具,再從上方選單打開終端機,並執行以下指令:
/Volumes/Image\ Volume/Install\ macOS\ High\ Sierra.app/Contents/Resources/startosinstall --volume Macintosh\ HD --converttoapfs NO --agreetolicense

若遇到沒有反應,或顯示「程式已毀損」之類的,很可能又是開發者憑證時間過期的問題,下指令把時間往前調,如:
date 010100002018 或 date 010100002017
然後再重打安裝指令

此時會將安裝檔複製到硬碟中,複製完會重開機,
此時將VM立即關機並退出光碟,然後再次開機,就會進入到Shell畫面,執行以下指令:
打exit退出Shell
選擇 Boot Maintenance Manager > Boot From File >
選第二個EFI選項 > macOS Install Data > Locked Files > Boot Files > boot.efi

此時就會真正開始安裝macOS了!

6.安裝完系統,在macOS終端機執行以下指令以解除軟體安裝限制:
sudo spctl --master-disable

若你是用VirtualBox 6以上的版本安裝,直接從VirtualBox選單選擇插入Guest Additions光碟,並執行VBoxDarwinAdditions.pkg以安裝guest additions,裝完後若有問題可參考以下鏈結解決:
https://stackoverflow.com/questions/41691803/how-to-install-guest-addition-in-mac-os-as-guest-and-windows-machine-as-host/43715619

若是VirtualBox 5,執行以下指令以修正解析度:
VBoxManage setextradata "MacOS" VBoxInternal2/EfiGraphicsResolution 1920x1080

7.將自已加入vboxusers群組,以正常連接外部裝置(如usb裝置等):
sudo groupadd vboxusers
sudo usermod -aG vboxusers ${USER}
再重開機

2019-08-03

Google Colab 環境深入研究

如果有用過jupyter notebook或jupyter lab,對google的Colab應該很快就能理解並上手,
因為功能本來就很簡單,網路上也有一堆使用教學,所以這裡不需要再重複教那些簡單的東西。

今天來玩點不一樣的,看看colab給我們的虛擬機其實際環境為何?表面上它是給你練習程式用的(自已本機裝個jupyter不是更好用),懂門道的則是會想辦法榨乾這台虛擬機的資源,有GPU & TPU為啥不盡量用來訓練模型?不過Google也說了,你要拿來跑長時間運算的話(訓練模型啦、挖礦啦...),很有可能被中斷運算,更有可能被停止使用Colab,所以佛心還是有其限制的,並不是網路那些教學文說的GPU & TPU用到爽。

先來看它的系統版本,會發現是 Ubuntu 18.04.2:
!cat /etc/os-realease
==================
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
=================

再來看看身份為何,發現是root:
!whoami
=================
root

看看系統記憶體及硬碟:
!vmstat
!echo
!df -h
================
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 3333896 140012 9319100    0    0   140     7  100  186  0  0 99  0  0

Filesystem      Size  Used Avail Use% Mounted on
overlay          49G   26G   22G  55% /
tmpfs           6.4G     0  6.4G   0% /dev
tmpfs           6.4G     0  6.4G   0% /sys/fs/cgroup
tmpfs           6.4G  8.0K  6.4G   1% /var/colab
/dev/sda1        55G   27G   29G  49% /etc/hosts
shm             6.0G  8.0K  6.0G   1% /dev/shm
tmpfs           6.4G     0  6.4G   0% /sys/firmware
drive            15G  131M   15G   1% /content/drive

看一下process屬於哪個cgroup控制,發現原來容器正是docker:
!cat /proc/self/cgroup
===============
12:rdma:/
11:cpu,cpuacct:/docker/fc5610f0b7ea554a6ef808efc233fdc4d0523b52481412d1fc8f324fa44e3bcb
10:pids:/docker/fc5610f0b7ea554a6ef808efc233fdc4d0523b52481412d1fc8f324fa44e3bcb
9:freezer:/docker/fc5610f0b7ea554a6ef808efc233fdc4d0523b52481412d1fc8f324fa44e3bcb
8:blkio:/docker/fc5610f0b7ea554a6ef808efc233fdc4d0523b52481412d1fc8f324fa44e3bcb
....

看一下目前的python版本及模組路徑(注意,colab或jupyter是透過ipython執行):
!python -V
!ipython -V

import sys
sys.modules['google.colab']
==================
Python 3.6.8
<module 'google.colab' from '/usr/local/lib/python3.6/dist-packages/google/colab/__init__.py'>

想跑個bash也行,不過輸出不會自動清除,輸入也都變成了星號…太跛腳了(後面會介紹如何真正用ssh進入shell),離開打exit或按cell左方的停止鈕即可:
!bash
=====================
bash: cannot set terminal process group (6317): Inappropriate ioctl for device
bash: no job control in this shell
root@fc5610f0b7ea:/content#

它還能直接mount我們自已的google drive:
from google.colab import drive
drive.mount('/content/drive')
=====================

這時我就好奇了,要是能mount的話,不就代表有一支Linux版本的Google File Stream程式嗎?(因為不可能用File Sync同步檔案到虛擬機吧....)

!cat /usr/local/lib/python3.6/dist-packages/google/colab/drive.py
====================
...
drive_bin = _os.path.join(env.root_dir, 'opt/google/drive/drive')
...
====================
原來程式是藏在 /opt/google/drive/drive ,來看一下使用說明:
!/opt/google/drive/drive --helpfull

接下來實驗能不能順利在自已電腦上使用這支程式,我本身是系統是Linux Mint,把
/opt/google/drive/drive
/opt/google/drive/roots.pem
這二支檔案下載回自已本機並放在同樣/opt/google/drive/ 資料夾內,直接下指令掛載:
$umount -f ~/google-drive || umount ~/google-drive; pkill -9 -x drive
$mkdir -p ~/.config/Google
$/opt/google/drive/drive --features=opendir_timeout_ms:86400000,virtual_folders:true --inet_family=IPV4_ONLY --preferences=trusted_root_certs_file_path:/opt/google/drive/roots.pem,mount_point_path:$(echo ~)/drive --console_auth

出現要輸入access key的時候,連到Terminal所顯示的網址去把key複製回來貼上,然後呢?就沒有然後了,因為ip被block掉了,看來這支程式只允許在Colab上跑,殘念。
因為本來都是使用google-drive-ocamlfuse來掛載google drive,不過常常中斷需要重連,所以蠻困擾的,希望Google官方有一天能開放Linux版Google Stream下載。

如果要跑一個對外的server呢?可以使用 http://serveo.net/ 或https://localtunnel.github.io/www/ 用ssh reverse tunnel來開放port給外部連線到這個虛擬機,譬如我想要能夠用新增一個使用者(有sudo權限),並用ssh連到這台虛擬機,那可以利用serveo.net把port 22開放:

虛擬機:
!echo -e "StrictHostKeyChecking no\nUserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config
!echo -e "ClientAliveInterval 120\nClientAliveCountMax 720" >> /etc/ssh/sshd_config
!/etc/init.d/ssh restart
!apt-get update
!apt-get install -y autossh
!adduser userduck; adduser userduck sudo
!autossh -M 0 -R duckvm:22:localhost:22 serveo.net  > /dev/null 2>&1 &

2020.10.06 update:
servero.net似乎已經失效,可參考寶哥做法:
https://blog.miniasp.com/post/2019/12/15/how-to-setup-ssh-reverse-tunnel

本機:
$ssh -J serveo.net userduck@duckvm

$ssh -o ProxyCommand="ssh -W duckvm:22 serveo.net" -v userduck@duckvm
進去後試一下:
$sudo -i
#apt-get install net-tools
#netstat -tnlp

不過要注意的是,你一次頂多只能開二個notebook頁籤做事, notebook關掉後再重開的話,變數值跟輸出都還是會保留,
還有要注意的是,colab網頁放著不做事超過90分鐘,或者連續執行最長12小時後,虛擬機(docker)都會清除重來(跟在colab上重置runtime是一樣意思),上面的檔案、設定、另外安裝的套件...等等,都會不見,如果覺得每次要重新設定環境很煩,可以把script寫個notebook存起來,每次重新執行即可。

想當成臨時12小時的快閃server用,還是不錯用的,譬如架個web server暫時提供服務,然後colab給它跑個 !ping -i 60 8.8.8.8 維持不要idle之類的。

如果希望colab能連接到local runtime,你可以參考這個別人做好的docker image:
https://dev.to/ikeyasu/how-to-use-google-colaboratory-with-local-runtime-4j1p
不過看起來有點舊,還是ubuntu 17而不是ubuntu 18,我是覺得不如自已拉個python3的image回來自已再裝上jupyter。

ref:
https://stackoverflow.com/questions/55050988/can-i-run-a-google-colab-free-edition-script-and-then-shutdown-my-computer



2019-08-02

IntelliJ Idea的market place無法從網路載入plugin清單的問題


如果遇到IntelliJ Idea的market place plugin無法從網路載入清單,
可以先關閉ipv6,或修改idea 的vm options,強制為ipv4試試:

修改
~/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/192.5728.98.vmoptions

加入
-Djava.net.preferIPv4Stack=true

不過很寄怪,改了之後變成時好時壞,不知是不是我是使用openjdk8,而不是用jetbrain jvm的關係。

2019-07-23

Java Web Start(JWS)在JDK11的因應

由於JDk11開始就不會再支援Java Web Start(JWS),以下提供幾種做法:

1.利用JDK11的jlink,對應各平台產生獨立的run-time image,並對應各系統平台製作安裝檔(win->.msi, linux->.deb,.rpm, mac->.pkg蠻累人的)。

記得,你的應用程式如果要能正常的在JDK11跑,module-info.java記得要設定有用到的模組。

2.安裝JDK11後,再安裝icedtea-web:
https://icedtea.classpath.org/wiki/IcedTea-Web
https://github.com/AdoptOpenJDK/IcedTea-Web

github上的release有win跟linux平台的已編譯launcher,但就是沒有mac的,不過也不難處理,可以參照以下這個解法:
https://apple.stackexchange.com/questions/342943/in-macos-how-to-run-a-jnlp-file-with-openjdk-8?rq=1
或者直接在mac自已寫一個shell script launcher:
#!/bin/bash
if [ "x$JAVA_HOME" = "x" ] ; then
    JAVA="$( which java 2>/dev/null )"
else
    JAVA="$JAVA_HOME"/bin/java
fi
if [ "x$JAVA" = "x" ] ; then
    echo "Java executable not found"
exit 1
fi
if [ "x$1" = "x" ] ; then
    echo "Please provide JNLP file as first argument"
    exit 1
fi
$JAVA -Xbootclasspath/a:netx.jar net.sourceforge.jnlp.runtime.Boot $1

icedtea-web >=1.8的版本開始支援jdk11,但在1.8版+jdk11跑似乎有點bug,
譬如AWT視窗凍結,因此我又降回1.6版+jdk8就又恢復正常。
似乎真的是jdk11的bug:
https://icedtea.classpath.org/wiki/IcedTea-Web#Common_Issues
https://bugs.openjdk.java.net/browse/JDK-8204142

3.安裝JDK11後,再安裝OpenWebStart:
https://openwebstart.com/technical-details/

這專案是基於icedtea-web衍生而來,官網表示在jdk8或jdk11都可使用,
也有已編譯好的win/mac/linux/unix執行檔,可以試試看。

4.改用.NET core + GTK,製作跨平台的視窗程式,只是除了windows以外,其它平台都要先安裝.NET core;除了linux外,其它平台都要先安裝GTK library(當然也可以先打包在程式內)

Ubuntu 18.04上同時有jdk8及jdk11的JavaFX(OpenJFX)安裝問題

由於有同時開發java8及java 11的需求,因此裝了openjdk8跟openjdk11,
如果在ubuntu上二個jdk都要安裝javafx(openjfx),會是一件頭痛的事。

先來處理jdk8 + openjfx8:

為了jdk8能使用javafx,需強制降版安裝openjfx8:
sudo apt install \
  openjfx=8u161-b12-1ubuntu2 \
  libopenjfx-java=8u161-b12-1ubuntu2 \
  libopenjfx-jni=8u161-b12-1ubuntu2

sudo apt-mark hold \
  openjfx \
  libopenjfx-java \
  libopenjfx-jni

(當然也可以直接改用oracle jdk8,但oracle是個死要$的公司,你知道的)
改安裝zulu jdk也可以,jkd8直接就含openjfx,未來會連jdk11也一起包含openjfx。
https://www.azul.com/zulu-gets-graphical-with-openjfx/

=========================這裡可以跳過============================
也可以手動下載deb來裝:
https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/libopenjfx-java_8u161-b12-1ubuntu2_all.deb.html
https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/openjfx_8u161-b12-1ubuntu2_amd64.deb.html
https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/libopenjfx-jni_8u161-b12-1ubuntu2_amd64.deb.html

比較怕死的,將這三個.deb手動解壓縮:
dpkg -x libopenjfx-java_8u161-b12-1ubuntu2_all.deb ./openjfx8
dpkg -x openjfx_8u161-b12-1ubuntu2_amd64.deb ./openjfx8
dpkg -x libopenjfx-jni_8u161-b12-1ubuntu2_amd64.deb ./openjfx8
再依解壓縮後的目錄結構放到系統對應的資料夾。

或直接下指令強迫安裝(注意,--refuse-overwrite=不覆寫舊檔):
dpkg --install --refuse-overwrite --force-depends --force-conflicts libopenjfx-java_8u161-b12-1ubuntu2_all.deb
dpkg --install --refuse-overwrite --force-depends --force-conflicts openjfx_8u161-b12-1ubuntu2_amd64.deb
dpkg --install --refuse-overwrite --force-depends --force-conflicts libopenjfx-jni_8u161-b12-1ubuntu2_amd64.deb
=================================================================

再來處理jdk11+ openjfx11:

要是apt強制降版裝openjfx8,那原本預設的openjfx11就會被移除,
因此只能手動處理。

先手動下載openjfx模組(JavaFX Linux jmods)放到:
/usr/lib/jvm/java-1.11.0-openjdk-amd64/jmods

再下載openjfx SDK(JavaFX Linux SDK),解壓縮後要放哪都行,譬如放到
/usr/lib/jvm/java-1.11.0-openjdk-amd64/openjfx

如果是用Jetbrains IntelliJ + JDK >=11,可以參考以下設定環境:
https://openjfx.io/openjfx-docs/#IDE-Intellij
(先新增專案的openjfx SDK library路徑,然後編輯module-info.class加入javafx對應模組,或直接在VM啟動選項新增模組路徑及對應模組)

=================================================================
別忘了裝scene builder:
https://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-1x-archive-2199384.html
https://docs.oracle.com/javase/8/scene-builder-2/installation-guide/jfxsb-installation_2_0.htm
=================================================================
ref:
https://stackoverflow.com/questions/49469941/netbeans-error-bundler-webstart-jnlp-bundler-jnlp-failed-to-produce-a-bundl
http://hongouru.blogspot.com/2015/09/solved-error-building-new-project-using.html
https://stackoverflow.com/questions/53744923/java-lang-unsatisfiedlinkerror-com-sun-glass-ui-gtk-gtkapplication-isdisplayva
https://bugs.launchpad.net/ubuntu/+source/openjfx/+bug/1799946

2019-07-18

Arch Linux 安裝在VirtualBox後,安裝Guest Additions

將Arch Linux安裝在VirutalBox(GUEST端)跟一般安裝一樣沒啥特別,不過安裝Guest Additions時會比較麻煩一點:

1.在VBox選單選擇「Devices/Insert Guest Additions CD Image...」

2.安裝build kernel必要的package:
#sudo pacman -S gcc make perl

3.找出kernel版本,再安裝headers:
#uname -r
<4.19.59-1-MANJARO>

#sudo pacman -Si linux419-headers
版本: 4.19.59-1

#sudo pacmam -S linux419-headers

4.安裝guest additions
cd /run/media/username/VBox_GAs_6.0.10/
sudo sh VBoxLinuxAdditions.run

5.重開機,可以調整解析度囉!別忘了還要在HOST端安裝Extension Pack,才能支援USB 2.0 and USB 3.0 devices, VirtualBox RDP, disk encryption, NVMe and PXE boot for Intel cards…等功能

6.以後要是有升級kernel,記得要
rcvboxadd quicksetup <version>
或直接
rcvboxadd quicksetup all
重建module

ref:
https://wiki.archlinux.org/index.php/VirtualBox#Installation_steps_for_Arch_Linux_guests
https://www.virtualbox.org/wiki/Downloads

2019-07-11

Visual Studio Code使用Remote-SSH套件遠端作業

由於常常需要ssh連到server修改檔案,之前是使用VSCode的remote workspace套件:
https://marketplace.visualstudio.com/items?itemName=mkloubert.vscode-remote-workspace

後來微軟又出了個Remote Development套件,裡面包含了:

  • Remote - SSH - Work with source code in any location by opening folders on a remote machine/VM using SSH. Supports connecting to x86_64 Linux SSH servers now, and more platforms are on the way.
  • Remote - Containers - Work with a sandboxed toolchain or container based application by opening any folder inside (or mounted into) a container.
  • Remote - WSL - Get a Linux-powered development experience from the comfort of Windows by opening any folder in the Windows Subsystem for Linux.
如果只有SSH遠端作業的需求,只要單獨安裝Remote - SSH即可:

目前該套件能正常連線遠端server有以下作業系統:
Full support: x86_64 Debian 8+, Ubuntu 16.04+, CentOS / RHEL 7+.
Experimental support: ARMv7l Raspbian 8+ (32-bit) in Visual Studio Code Insiders only.

果然我找了台CentOS 6就無法連線成功了...但其實如果你堅持要能在版本比較舊的server端使用,可以參照以下說明,在server端安裝缺少的一些library:
https://code.visualstudio.com/docs/remote/linux#_tips-by-linux-distribution

像CentOS 6可以照以下方法讓Remote-SSH套件能使用,安裝完重開機即可(注意,因為是升級library,可能會造成server某些服務不正常,如果是跑重要服務的server要升級library前請三思):
https://code.visualstudio.com/docs/remote/linux#_updating-glibc-and-libstdc-on-rhel-centos-6

不過遠端server要先做一些設定,修改 /etc/ssh/sshd_config,將 AllowTcpForwarding設定為yes,然後記得restart ssh demon:
sudo systemctl restart sshd

sudo service sshd restart
這樣本機端才能對server端建立 SSH tunnel,因為Remote - SSH必須靠建立tunnel才能使用(有點雷...)。

還有幾個設定比較需要注意的:

"remote.SSH.useLocalServer": true/false -> 讓vscode視窗共用單一連線,這會讓開啟vscode更快且不用一直輸入密碼,但有時候會造成無法正常連線(譬如timeout),此時設為false試試。一般來說我是設為false,但有些人須設為true才會沒問題。

"remote.SSH.listenOnSocket":true/false -> 如果remote server上有很多使用者的話(MacOS/Linux),那麼讓遠端的vscode server改用socket模式監聽,這樣可以增加安全性,同時sshd的AllowStreamLocalForwarding設定也要設為yes,這樣才能把tcp給forward到socket上。

接下來就是安裝Remote - SSH套件,連線ssh的方式較常見有key based authentication,或輸入password的方式、還有就是同時key+password,個人是習慣每次連線只輸入密碼,
至於網路一些教學說只能用key的方式,我覺得這些人也是東抄西抄不求甚解,這套件是基於ssh使用的,當然是可以直接輸入密碼認證。

先修改本機 ~/.ssh/config 檔案,加入以下設定:
Host server1
    HostName server1.com.tw
    User username

Host server2
    HostName server2.com.tw
    User username

#避免要多次輸入密碼,加入以下ControlMaster設定
Host *
    ControlMaster auto
    ControlPath  ~/.ssh/sockets/%r@%h-%p
    ControlPersist  24h

#防止timeout,每120秒就向server發送keep-alive封包,超過60次無回應斷線
ServerAliveInterval 120
ServerAliveCountMax 60


建立 ~/.ssh/sockets 資料夾:
mkdir -p ~/.ssh/sockets

之後就可以開始連線了,連線過程中會出現prompt要你輸入密碼,完成。




2019-07-09

Linux MInt 19 (Ubuntu 18.04)安裝Mednafen

Mednafen是另一套支援多種遊戲機的模擬器,當然在RetroArch也已包含Mednafen的遊戲核心(beetle開頭的都是),所以一般來說安裝RetroArch就不需要安裝Mednafen了,除非是習慣使用Mednafen,隨君喜好。

還有一套叫higan,但因此作者的設計理念是「精準模擬」,所以跑起來影像或聲音很可能會有卡頓的情形,不建議拿來玩遊戲,但要學習如何寫模擬器倒是可以參考。

由於Ubuntu上的Mednafen套件版本太舊,以下為自行compile & install的步驟:

1.下載mednafen的source code:
https://mednafen.github.io/releases/
此次下載的是 1.22.2版:
https://mednafen.github.io/releases/files/mednafen-1.22.2.tar.xz

2.安裝編譯時需要的工具及函式庫:
sudo apt-get install build-essential pkg-config libasound2-dev libsdl2-dev libsndfile1-dev zlib1g-dev

3.解壓縮並開始compile(建議用gcc)及安裝,譬如解壓縮到 ~/TEMP/mednafen後:
cd ~/TEMP/mednafen
./configure & make
sudo make install

4.下載前端介面mednaffe:
https://github.com/AmatCoder/mednaffe/releases
此次下載的是0.8.8 (注意:mednafen 1.xx開始需配合mednaffe >= 0.8.7使用)

5.解壓縮並開始compile(建議用gcc)及安裝,譬如解壓縮到 ~/TEMP/mednaffe-0.8.8 後:
cd /TEMP/mednaffe-0.8.8
./configure & make
sudo make install

6.啟動mednaffe,第一次可能會詢問mednafen路徑,使用 whereis mednafen 指令查詢後,指向正確執行檔路徑。

7.若要移除,進到原本compile的資料夾,make uninstall即可。

2019-07-07

Linux MInt 19 (Ubuntu 18.04)安裝Retroarch

因為Ubuntu上的Retroarch版本太舊了,想安裝新版Retroarch可照以下步驟:

1.加入RetroArch官方PPA:

穩定版:
sudo add-apt-repository ppa:libretro/stable

nightly build最新版:
sudo add-apt-repository ppa:libretro/testing

因為穩定版跑起來覺得有些問題,個人是安裝每日會自動commit & build的最新版,
目前最新版本的是1.7.7

2.先把舊的RetroArch移除:
sudo apt-get purge retroarch*
rm -rf ~/.config/retroarch

3.安裝新版RetroArch及所有遊戲核心、BIOS:
sudo apt-get install retroarch libretro*

建立存放BIOS的資料夾:
mkdir -p ~/.config/retroarch/system
把下面這一包
http://www.mediafire.com/download/7d5tbargr0iq2x8/RetroArch_BIOS.zip
解壓縮到上面建立的system資料夾

4.修改設定檔:
若直接打開retroarch程式,很有可能選單顯示不正常,且會出現找不到assets的警告,因此必須先手動修改設定檔。基本上有二個設定檔,位於:
~/.config/retroarch/retroarch.cfg
/etc/retroarch.cfg

若找不到~/.config/retroarch/retroarch.cfg,才會找/etc/retroarch.cfg,接著會自動產生~/.config/retroarch/retroarch.cfg,因此主要修改設定~/.config/retroarch/retroarch.cfg即可。Ubuntu 18.04請照以下設定修改(不修改的話,預設(default)會去找~/.config/retroarch下對應的路徑,但因為是用套件管理程式安裝retroarch,所以assets及cores需手動設定成正確路徑):

assets_directory = "/usr/share/libretro/assets/"
audio_filter_dir = "/usr/lib/x86_64-linux-gnu/retroarch/filters/audio/"
libretro_directory = "/usr/lib/x86_64-linux-gnu/libretro/"
libretro_info_path = "/usr/share/libretro/info/"
video_filter_dir = "/usr/lib/x86_64-linux-gnu/retroarch/filters/video/"
menu_show_core_updater = "false" (不經由retroarch升級遊戲cores,而是由ubuntu更新,目前先設為true,第6頻驟建立遊戲清單完再設為false,不過有些遊戲核心如mame似乎ubuntu套件沒有提供,故也可以改用sudo retroarch執行後,再進retroarch去更新核心)
xmb_font = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc" (指定中文字型,請依照自已喜好的字體)
system_directory = "~/.config/retroarch/system" (BIOS資料夾)

譬如想找Noto Sans CJK字型的位置,可用以下指令:
fc-match -a | grep CJK
locate NotoSansCJK-Regular.ttc

5.啟動retroarch,若不喜歡預設的XMB介面,可以按F5叫出windos介面做設定或載入遊戲


6.自動建立遊戲清單:
注意:自動建立的遊戲清單裡的遊戲名稱會變英文,不喜歡者請自行手動建立清單。

先在「主選單/連線更新器/更新核心訊息文件」更新各遊戲核心的遊戲資料庫,
再到「導入遊戲內容/掃瞄文件夾」直接掃瞄ROM所在位置,
會自動依各機種對應的遊戲清單,若自動掃瞄沒有找到再自行手動加入,
(由於RetroArch不一定能正確找出ROM所對應的機種遊戲,因此有時需手動加入ROM)
然後在「主選單/連線更新器/playlist thumbnails updater」去自動抓縮圖。


ref:

2019-07-01

linux mint(ubuntu)修改xfce視窗的邊框大小(為了能拖曳改變大小)

因為想換個mac like的佈景主題,於是安裝了McOS-MJV-Dark-XFCE-Edition這個主題:
https://www.gnome-look.org/p/1279806/

但這佈景主題有個缺點,就是右下角跟左下角無法拖拉改變大小,因為邊框厚度為0的話,無法拖曳,原作者說這是xfwm的bug,而且作者覺得增加邊框會不像mac主題(所以要犧牲正常功能??),不過只能從左右上角去拖曳,有時真的很麻煩...只好手動把邊框加回去。

當然,你也可以用熱鍵的方式拖曳大小,譬如 alt + 滑鼠右鍵,但有時就是不想二手一起動...)

1.下載Border Only這個主題:
https://www.xfce-look.org/p/1016214/

2.修改xfwm4內所有bottom*.xpm, left*.xpm, right*.xpm共10個檔案,內容全部改成
/* XPM */
static char * left_active = { <-- 此行依各檔名稱不同保留不改
"1 1 1 1",
"#      c #CECECE", <-- 顏色依個人喜好修改,此處為淺灰色
"#",
};

3.複製上述10個修改過的xpm檔案到佈景主題的xfwm4資料夾內(其餘未修改的檔案用不到),如~/.themes/佈景主題/xfwm4/

4.重新載入主題
xfwm4 --replace

ref:
https://superuser.com/questions/436541/how-do-you-increase-the-resize-border-thickness-in-xubuntu-12-04
http://sevkeifert.blogspot.com/2014/12/increase-window-border-size-in-xubuntu.html
https://wiki.xfce.org/howto/xfwm4_theme
https://xubuntu.org/news/window-resizing-in-xubuntu-and-xfce/

2019-06-17

Linux Mint (Ubuntu) 使用joystick搖桿手把

1.先安裝joystick及jstest-gtk套件:
sudo apt-get install joystick jstest-gtk

2.使用jstest-gtk校正手把,並看看按鈕是否有正常反應

3.如果為xbox手把,可加裝套件xboxdrv並在每次使用xobx手把前啟動:
sudo apt-get install xboxdrv
sudo xboxdrv –detach-kernel-driver –silent
(–detach-kernel-driver參數勿省略,會先卸載xpad模組再使用xobxdrv模組)

4.若xobxdrv無法正常作動,加裝ubuntu-xboxdrv:
sudo apt-add-repository -y ppa:rael-gc/ubuntu-xboxdrv
sudo apt-get update
sudo apt-get install ubuntu-xboxdrv

5.若要手把能對應鍵盤或滑鼠,可安裝qjoypad
sudo apt-get install qjoypad
qjoypad –notray

2019-06-13

Linux Mint(Ubuntu)無法正常載入Nvidia驅動解決方法

Ubuntu官方套件庫內的 Nvidia Driver 39X 以後將不支援Ubuntu Kernel >= 4.19,因此我們可以提早升級Nvidia Driver到4XX版本,若Nvidia Driver無法正常載入也可試試以下方法:

2019-05-13

讓老顯卡Geforce 210在Windows能支援2K解晰度(2560x1440)

有張華碩Gefroce 210(EN210 SILENT/DI/1GD3/V2(LP))裝在HP的2K顯示器上,因為解析度預設沒有2560x1440可選,但上華碩官網看最高解析度卻是有的:

D-Sub 最高解析度 : 2048x1536
DVI 最高解析度 : 2560x1600

Nvidia官網也是有寫:

Maximum Digital Resolution 2560x1600
Maximum VGA Resolution 2048x1536

上了一些論壇說要DVI才行,但實際上也是沒出現2K選項,後來發現其實不是DVI或HDMI或線材的問題,而是必須用自訂解析度的方式解決:

1.安裝Nvidia驅動,打開Nvidia控制面版,選擇解析度 --> 自訂

2.輸入2560x1440,「標準」選項(很重要!)請選擇「CVT」(有二個,我是選CVT reduced blank),不要用預設的自動

3.測試成功後,儲存,再選擇2560x1440解析度

還好,不然差點就要買新顯卡了...

ref:
https://www.notebookcheck.net/2560x1440-or-2560x1600-via-HDMI.92840.0.html

2019-05-08

Linux Mint (Ubuntu) 使用 NUT (Network UPS Tools)


因為舊的台達水瓶座UPS因為沒有Linux上可支援的軟體,因此改採買了一台科風WAR-1000AP(更新:用了二年多同時採購的二台同型號UPS板子都壞了,強列不建議購買),
不過科風的Linux軟體裝上去發現爛得可以(Linux UPSMON PRO),看起來用java7寫的,體積大不說,不但抓不到usb設備,一些test指令下了還會噴錯誤....因此用Linux作業系統的就不建議買科風了,當初是看它有支援Linux才買的,沒想到Linux軟體寫得這麼爛(科風工程師自已都沒先好好測過嗎?),早知就買台達的新型號UPS。

不過買都買了,要是沒法解決就要換貨了,還好看到NUT(Network UPS Tools)的相容列表對科風的支援好像還不錯:
因此就改用NUT來監視UPS,不過不得不說這軟體設定有夠囉嗦的...

2019-01-28

macOS 使用brew安裝 java8

以前可以從brew直接指定安裝jdk8:
brew cask install java8

不過目前沒法直接指定jdk版本,要安裝jdk8變這樣:
brew tap caskroom/versions
brew cask install java8

看一下目前有提供的java(或jdk):
brew search java
brew search jdk

目前都預設安裝jdk 11了:
brew cask info java
brew cask info adoptopenjdk
brew cask info oracle-jdk

2019-01-21

Linux Mint 建立 L2TP VPN CLIENT

由於Linux Mint預設並沒有L2TP VPN CLIENT,因此需手動新增必要的 package才有辦法達成,以下以Linux Mint 19連線QNAP的L2TP VPN SERVER為例:

  1. 二選一,可使用strongswan或libreswan

    使用strongswan(建議,可支援一些舊加密協定):
    sudo apt-get install network-manager-l2tp-gnome network-manager-strongswan libstrongswan-standard-plugins libstrongswan-extra-plugins

    使用libreswan:
    sudo apt install network-manager-l2tp-gnome libreswan
  2. 重開機,於「網路連線」新增L2TP VPN設定
  3. 輸入gateway及帳號密碼後,還需要依照以下圖示設定:
    其中Phase 1 & phase 2 Algorithms依照安裝的為strongswan或libreswan有所不同:

    strongswan :
    Phase1: aes256-sha1-modp1024,aes128-sha1-modp2048,aes128-sha1-modp1536!
    Phase 2 : aes256-sha1,aes128-sha1!

    libreswan:
    Phase1: aes256-sha1-modp1024,aes128-sha1-modp2048,aes128-sha1-modp1536
    Phase 2 : aes256-sha1,aes128-sha1

    (3des加密目前已證實有安全性問題並被廢棄支援,大多改採用aes128或aes256)

    image.png

    QNAP或SYNOLOGY的L2TP SERVER套件通常可設定為PAP或MS-CHAPv2驗證,一般是選MS-CHAPv2較安全
  4. VPN開始連線前,可使用 sudo journalctl -f 觀看log訊息以方便除錯,連線成功後可用ipsec statusall看連線所使用的方式及資訊,像連線到qnap l2tp,會發現是使用IKEv1, aes256-sha1-modp102去連線。
  5. 若要增加 Cisco VPN,可再安裝 network-manager-vpnc-gnome

ref:
https://community.ubnt.com/t5/UniFi-Routing-Switching/L2TP-VPN-on-Ubuntu-18-04-client/td-p/2492451
https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2CipherSuites

2019-01-18

macbook 藍芽作動不正常問題排除


當macbook的藍芽符號出現灰色,或者無法配對、無法找到裝置…等等奇怪的問題,可以先從軟體方面先去解決看看:


  1. 刪除 /Library/Preferences/com.apple.Bluetooth.plist 並重開機
  2. 重置NVRAM
  3. 重置SMC
  4. 開機時按住D或Option + D,執行系統檢測,看是硬體或軟體問題
  5. 若檢測出是軟體問題,開機時按住CMD+R,重新安裝系統(安裝完使用者資料及程式會保留,不用擔心)

若是硬體問題,那麼可能就得更換藍芽零件,淘寶賣價大約是台幣三四百元。
拆的時候請使用尺寸適合的十字鏍絲起子,以免造成鏍絲崩牙而無法拆裝。
安裝完後若仍無法作動(前提是更換上的藍芽零件沒有問題),那麼重複前面123的步驟應該就可正常使用。