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 救回來了。

編譯 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 就可以叫出來,這時可以看到剪貼簿的過往紀錄。

參考資料:

Use NFS as synced folder in Vagrant

Just note during I use NFS as synced folder in Vagrant.

  1. In your host, you have to install nfs-kernel-server:
    sudo apt-get install nfs-kernel-server
  2. In your Vagrantfile, you have to specify private_network even you want to use public_network.  If you don’t specify private_network, vagrant up will fail.  Then specify synced_folder.
    config.vm.network "private_network", ip: "192.168.33.10"
    config.vm.network "public_network", ip: "192.168.11.2", bridge: "eth0"
    config.vm.synced_folder ".", "/vagrant", type: "nfs"

Reference:

猜編碼、轉換編碼與簡繁轉換

猜編碼,可以使用 enca 指令。安裝可以用 sudo apt-get install enca ,要猜的時候,就用 enca your_file 。除了會顯示檔案內容所使用的編碼名稱之外,也會顯示所使用的換行字元是 CR 或 CRLF 。

轉換編碼,可以用 iconv ,一般不需要特別安裝就會有了,真要安裝的話,用 sudo apt-get install libc-bin ,使用方法則是 iconv -f from_code -t to_code -o new_file your_file ,-f from_code 是指定 your_file 的編碼,-t to_code 是新檔案的編碼,-o new_file 則是要輸出的新檔案。例如:iconv -f big5 -t utf-8 -o new_file.txt your_file.txt

要省麻煩的話,最佳的神器是 madedit ,不過這個專案停止維護一段時間了,要使用的話,就得有點 C/C++ 的底子,自己下載原始碼來編譯。一般的文字編輯軟體或 IDE 也可以用啦,只是就沒 madedit 那麼好用了。

簡繁的轉換,在瀏覽器 (Firefox/Chrome) 上可以用「新同文堂」,指令的話可以用 opencc :

  • 簡轉繁:opencc -i old_file -o new_file -c /usr/lib/x86_64-linux-gnu/opencc/zhs2zhtw_p.ini
  • 繁轉簡:opencc -i old_file -o new_file -c /usr/lib/x86_64-linux-gnu/opencc/zht2zhs.ini

這邊比較讓人困惑的地方大概就是 -c 的設定檔,設定檔定義簡轉繁或繁轉簡的動作(也可以轉成香港用字),而這些設定檔則是被包在 libopencc1 裡,用 dpkg -L libopencc1 就可以看到了。

以上都是在 ubuntu 14.04 裡使用,其他 distro 應該也是大同小異,指令一樣,就套件名稱不同而已。

LTS Enablement Stacks – trusty to utopic

要把 trusty 的 kernel 跟 xserver 升級到目前 utopic ,可以參考這篇 Kernel/LTSEnablementStack – Ubuntu Wiki

其實就是 apt-get install 相關的 package 而已:sudo apt-get install –install-recommends linux-generic-lts-utopic xserver-xorg-lts-utopic libgl1-mesa-glx-lts-utopic libegl1-mesa-drivers-lts-utopic

伺服器版的話,因為沒有 xserver 的牽絆,只要 sudo apt-get install –install-recommends linux-generic-lts-utopic 就可以。

要特別注意的,就是在安裝過程會移除掉某些 package,這裡要特別留意,在安裝前 apt 會有事先提示。以我來說,skype 、google earth 跟 wine 都被移除掉,所以在安裝完重開機以後,要記得把這些軟體裝回去。

這次升級的意外發現是 Google earth 不需要額外處理就有中文顯示了,終於啊…

KeePass / KeeFox

花了一點功夫才搞定,表示應該紀錄一下。

先安裝 KeePass:sudo apt-get install keepass2 mono-dmcs libmono-system-management4.0-cil

然後透過 Firefox 的套件管理安裝 KeeFox,重新啟動 Firefox 以後會有提示,說要複製 KeePassRPC.plgx 到 KeePass 的資料夾,我就是卡在這裡,這裡就是要將他提示的路徑的 KeePassRPC.plgx 複製到 /usr/lib/keepass2 下,這個檔案其實是 keepass2 的 plugin,主要功用是啟動一個 server,讓 KeeFox 能跟 keepass2 溝通。

啟動 keepass2,建立新的資料庫,設定 Master password 或設置密碼等等。回到 KeeFox 選項裡,設置資料庫的路徑(看存在哪裡)、keepass2 的路徑 (/usr/bin/keepass2),這樣就大功告成了。

缺點就是,keepass2 要開著… >_<

參考資料: