Amazon Cloud drive on Ubuntu

安裝 acd_cli 就可以了。

安裝跟使用可以參閱 https://acd-cli.readthedocs.io/en/latest/ ,用 pip3 install
git+https://github.com/yadayada/acd_cli.git 就安裝完了。不想裝到系統 /usr/local 的話,加上 –user,可以裝到 $HOME/.local 裡。

第一次使用要先 acd_cli sync,之後就可以使用上傳等功能了,最方便的是,acd_cli 可以利用 FUSE 掛載在某個資料夾下,這樣就可以用檔案總管或是 rsync 一類的軟體來處理了。

參考資料:

phpvirtualbox

無意在 /etc/init.d 下看到 vboxweb-service 這個服務,好奇的把名字丟到 google 去找,才知道是 virtualbox 要提供給 phpvirtualbox 使用的服務。

安裝方法不難,不過我還是搞了好一陣子 (大約4個小時吧),以下是我所參考的文件。

我遇到的問題:

  1. nginx + php5-fpm 只為特定 location 啟用 PHP :這部份卡了我好一陣子,後來是找到這篇:php – nginx projects in subfolders,參考裏面的作法去設定。大致是這樣:
    location /wiki {
        root /var/www/wiki/public;
    }
    
    location ~ /wiki/.+\.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
    }
    
  2. 無法啟動 vboxweb-service,出現 “vboxwebsrv: error: failed to initialize COM”:原本以為是沒加 dialout 群組的關係,後來根據某篇討論(網址不小心被我丟了)仔細推敲以後,發現是因為 VBOXWEB_USER 所指定的使用者沒有 HOME 資料夾,幫這個使用者建立 HOME 以後,就可以順利啟動 vboxweb-service 了。
  3. 無法登入 phpvirtualbox:這是我自己搞錯了,原本以為 config.php 裡指定的 username 跟 password 就是用來登入 phpvirtualbox 的帳號跟密碼,但後來才知道這組帳密是讓 phpvirtualbox 與 vboxweb-service 溝通用的,預設的 phpvirtualbox 帳密是 admin/admin。要修改的話,登入以後再變更就可以。
  4. RDP(Remote display) 不能用:這要先查到 virtualbox 的版本號碼,然後到Virtualbox download site下載對應的 .vbox-extpack 檔案,再用 vboxmanage extpack install 安裝。安裝完成以後,要重新啟動 vboxweb-service 與 vboxdrv 這兩個服務。最後用瀏覽器開啟 phpvirtualbox 頁面,去設定指定的 VM,就可以看到 Remote display 可以設定了。啟動 VM 以後,就可以用遠端桌面連線連上並看到這台 VM。連線所指定的 IP 是 host phpvirtualbox 這台機器的 IP,port 則是 3389。

另外,啟動所需要的光碟 ISO 檔案或是已經有打包好的 disk image 無法透過 phpvirtualbox 上傳,必須要事先透過 SSH、FTP 等傳輸協定放到 host 上。

其他參考資料 (與 nginx/php5-fpm 相關的):

Linux GPS 軟體小記

最近比較常在看 GPS 軌跡,紀錄一下 Ubuntu 下有在用的軟體:

  1. gpxviewer :用來看 gpx 檔案軌跡的工具,圖資是用 OpenStreetMap 。
  2. gpsprune:用來裁剪/合併 GPS 軌跡用的工具,用 Java 寫的,圖資一樣是 OpenStreetMap。
  3. gpsbabel/gpsbabel-gui:用來轉換各種軌跡檔案的工具。常見的 gdb ,要選 garmin mapsource (gdb) ,而 gpx 則是 GPX XML。
  4. gpscorrelate:根據 gpx 軌跡檔,在照片的 exif 加入地理座標標籤的工具。這工具蠻貼心的加入了 offset 的功能,也就說 gps logger 的時間跟照片時間有差距也沒關係,可以透過這 offset 去推算。

今天還有找到 garmin-forerunner-tools 跟 garmin-plugin 是可以搭配我那隻 Garmin ForeRunner 手錶的工具,要找時間來試試看。

sort month in bash

今天用 sort 去排序月份字串,明明說可以用 -M 來排序,可是實際結果卻不行。使用 –debug 來察看如何排序,卻發現有 “no match for key” 的訊息,這就奇怪了。

找了半天,才找到這篇 bash – Shell sort by month ,才明白這跟 locale 有關係,因為我的 locale 設定為 zh_TW.utf-8 ,sort 在判讀月份時,是使用當地的月份來判讀,而不認英文的月份。解決方法就是加上 LANG 或 LC_TIME 即可:LANG=c sort -k1M your_file

Asus X450J Wireless not working

我安裝了 Linux Mint ,所以理論上以下的步驟在 Ubuntu/Debian 應該也是可行的。

X450J 使用的無線網路晶片是 BCM43132 ,安裝 bcmwl-kernel-source 這個驅動是對的。

用 dmesg 可以看到有載入 (模組名稱是 wl),再看 syslog 會發現 rfkill 說被 block 住。我後來參考了這篇 Wireless hard blocked – bcm43142 <SOLVED>

先用 sudo rfkill unblock all ,然後用 sudo rfkill list 去查看是哪個 module block 住,接著用 rmmod 卸載掉該 module ,等確定可以以後,再去設定 blacklist (在 /etc/modprobe.d/ 下新增 blacklist.conf ,裏面填 blacklist your_module )。

以 Asus X450J 的例子,問題是出在 acer-wmi 上,所以我在 /etc/modprobe.d 下新增 blacklist.conf ,並填入 blacklist acer-wmi 以後,重開機就解決了無線網路無法使用的問題。

找 Openbox 熱鍵

因為公司在用的鍵盤上有 Fn ,跟筆記型電腦一樣,某些按鍵上有特殊的符號,就想在 Openbox 設定檔裡加上設定。原本很單純的以為設定為 Fn+F1 這樣就可以,但是實際上並沒有所謂的 Fn  (參考:keyboard shortcuts – Adding key bindings for “Fn” + “Control” key in openbox)。

但是不知道按鍵的名稱,就無法設定。Google 以後,發現可以用 xev 來尋找熱鍵,在 terminal 下輸入 xev ,試著去按按看,就可以找出來。

KeyRelease event, serial 48, synthetic NO, window 0x6200001,
    root 0x31a, subw 0x0, time 2366748, (278,-31), root:(279,866),
    state 0x0, keycode 225 (keysym 0x1008ff1b, XF86Search), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

以上面的例子來說,就是 XF86Search,在 openbox 設定檔 keybind 的 key 裡填入,再設定要執行的動作就行了。

參考資料:

error, fat_get_cluster: invalid cluster chain

Android 手機沒辦法掛載 MicroSD,插到多合一讀卡機裡,接到桌機上,用 dmesg 看,發現有這樣的訊息:

error, fat_get_cluster: invalid cluster chain

請 Google 大神幫忙找答案:

循線找到 testdisk 這工具,sudo apt-get install testdisk 就可以安裝。

安裝以後,直接執行 sudo testdisk,大致就依照畫面,依照下面的選擇去選就可以了。

>Create a new log file
[Choose Disk]
>Intel/PC partition
>Advanced
[Choose Partition]
>Boot
>Repair FAT
[Accept Defaults and Write]
>(Q)uit until exited

大體來說,就是選磁碟、選 Intel/PC partition,選分割區,選 Boot,選 Repair FAT,再選 Accept default and Write 就行了。

想不到有這麼神奇的指令,托福,我的 MicroSD 救回來了。

取得 KVM 執行中 VM 的 IP

在建立並執行 VM 以後,除了利用 console 登入取得 IP 之外,有沒有辦法不要利用 console 取得 IP 呢?

第一個找到的是這篇:Tip: Find the IP address of a virtual machine,他的作法是取得 VM 的 MAC address ,再以 MAC address 去 arp 裡找到對應的 IP。這方法很簡單,但是有一個缺點,就是 VM 必須要有跟 host 有網路動作,arp 裡才會有這資訊。作者是用 perl 開發的,我改寫成 Python

這樣並不符合我的需求,所以又繼續找。後來找到這篇:linux kvm – Find IP of VM running KVM – Super User  ,裏面的前幾個回答也是說要用 arp,但是最後一則回覆提供了不同的答案,他是用 virt-cat 。查了一下,virt-cat  需要安裝 libguestfs-tools ,安裝好以後,就可以用 sudo virt-cat -d your_domain /var/lib/dhcp/dhclient.eth0.leases 去查看 /var/lib/dhcp/dhclient.eth0.leases 檔案並取得 IP 了。整理一下,使用這個方法必須:

  1. 安裝 libguestfs-tools 以取得 virt-cat
  2. VM 是使用 DHCP,如果是固定 IP ,我想這在製作 image 的時候,應該就能確定了,所以這不是問題。
  3. 網路介面是 eth0,如果是其他的 eth1 或什麼的,就自行把 eth0 換掉就可以。

缺點大概就是要 sudo 吧,不 sudo 的話,會有錯誤。查了一下,發現這是因為存取 /boot 下 kernel image 時,權限不夠所引起的,沒找到方法解決。

編譯 Raspberry PI Kernel

本意只是想在 Raspberry PI 上裝 Ghost ,結果 node-sqlite3 裝不上去,Raspberry PI 版子速度又太慢,就想乾脆用 QEMU 摹擬 Raspberry PI。

用 QEMU 摹擬 Raspberry PI 可以參考這篇:Raspberry Pi • View topic – HOWTO: Virtual Raspbian on Qemu in Ubuntu Linux 12.10

裏面的步驟大致是這樣:

  1. 取得 qemu 用的 kernel
  2. 取得 Raspbian imgae
  3. 安裝 QEMU:sudo apt-get install qemu-system-arm
  4. 執行 QEMU:qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -hda raspbian-jessie.img -kernel zImage -append “root=/dev/sda2” -net nic -net user,hostfwd=tcp::2222-:22 -serial stdio

我目前是卡在 qemu 用的 kernel 上,原本想說直接拿 raspbian 的 kernel.img 來用,但發現不行。如果用文章裡作者提供的 zImage 是可以開機,但會有找不到 init 的情況。所以現在就朝自己編譯 kernel 的方向來做,這部份可以參考:

儘管如此,我編譯出來的 kernel 仍然無法順利開機,找時間再研究吧~

Terminal 下的複製與貼上

複製與貼上是透過 xsel 指令,例如:

    • 複製到剪貼簿:xsel –clipboard < your_file
    • 將內容輸出到指定檔案: xsel –clipboard > your_new_file
    • 將指定字串放到剪貼簿裡:echo “your_text” | xsel –clipboard

如果連線到遠端,也可以使用,但是 ssh 連線時,必須加上 -Y 參數,或是在設定檔裡加上 ForwardX11 yes 跟 ForwardX11Trusted yes 。

另外再介紹 parcellite,這是一個剪貼簿的管理程式,類似 Windows 的 ditto。在啟動以後,按下 ctrl+alt+h 就可以叫出來,這時可以看到剪貼簿的過往紀錄。

參考資料: