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

參考資料:

Ansible mysql 相關模組所需的套件

使用 mysql_usermysql_db 這兩個模組時,Target 方必須要安裝幾個套件才能運作,否則會有錯誤

msg: the python mysqldb module is required

在 Ubuntu 裡要裝的是 python-mysqldb 、mysql-server  。python-mysqldb 是必要的,因為 python 的程式會需要用到這個模組;而 mysql-server 則要視你的 mysql server 所在機器而定,如果是在其他機器上,就可以不需要安裝。

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:

Build pcmanfm-qt in Ubuntu trusty

Just summary build steps.

First, you need to install these packages: qt5-default, qtchooser, qt5-qmake, appmenu-qt5, qtdeclarative5-dev, qttools5-dev, qttools5-dev-tools, libqt5x11extras5-dev, libglib2.0-dev, libgio2.0-cil-dev, libfm-dev, libmenu-cache-dev

Then clone pcmanfm-qt from https://github.com/lxde/pcmanfm-qt

Enter pcmanfm-qt directory, type: cmake -G “Unix Makefiles”, then run: make && make install

After installation, you need to add a file “x86_64-linux-gnu-local.conf” in /etc/ld.so.conf.d and put “/usr/local/lib/x86_64-linux-gnu/” in it.  Run sudo ldconfig to make the setting available.