現在、Lin4NeuroはVirtualBox上で動作する仮想マシンを配布するようになりました。仮想マシンでの使用方法を以下に記します。
カテゴリ別アーカイブ: Linux
Lin4Neuroのイメージファイル(isoファイル)を用いてVirtualBoxにインストールする方法
Lin4Neuro (L4N)は、isoイメージファイルおよびVirtualBoxの仮想アプライアンスを配布しています。
ここでは、isoイメージファイルを用いてVirtualBoxにL4Nをインストールする方法を解説します。
この方法は若干だけ手間がかかりますが、以下のメリットがあります。
- ハードディスクの容量を自分で設定できる
- ログイン名などを自分の好みにあわせられる
これが一番大きいメリットかと思われます。
ご自身で設定できます。
具体的な方法を以下に示します。Acknowledgmentとして、我々の研究室の山田典子さんが以下を準備してくださいました。
VirtualBoxのインストールまでは済んでいるものとして話をすすめます。なお、この方法では、VirtualBox Extension Packは不要です。
Ubuntu上でのVirtualBoxで仮想マシンを立ち上げようとしたときに Kernel driver not installed (rc=-1908) のエラーが出た場合の対処方法
自分が頻回に遭遇するエラーなので、備忘録として載せておきます。
Ubuntuでカーネルをアップデートすると、VirtualBoxを起動するときに、以下のエラーが出ます。

このエラーがでたときに、このまま
sudo /sbin/vboxconfig
としてもエラーが出て解決しません。(細かいエラーを保存し忘れました)
解決方法はシンプルで、新しいカーネルにあったカーネルヘッダーをインストールすることです。
以下に具体的な解決法を示します。
- カーネルのバージョンを確認
- 該当するバージョンのカーネルヘッダーをインストール
- /sbin/vboxconfig の実行
$ uname -r 4.15.0-22-generic
今の場合、4.15.0-22-generic であることがわかります
上記を賢く使ってインストールします。
$ sudo apt update $ sudo apt install linux-headers-$(uname -r)
これでカーネルヘッダーがインストールされます
$ sudo /sbin/vboxconfig vboxdrv.sh: Stopping VirtualBox services. vboxdrv.sh: Building VirtualBox kernel modules. vboxdrv.sh: Starting VirtualBox services.
これで無事にVirtualBoxの仮想マシンが起動するようになります。
VirtualBox上でUbuntuの画面が乱れてしまった時の対処法
VirtualBox上にUbuntu (正確にはLin4Neuroなのですが)をインストールしたところ、下図のように画面が乱れるという現象が再現性をもって起こりました。

ログイン画面が表示されているのですが、これでは全く使いものになりません。
いろいろ調べていたのですが、なかなかわからなかったのですが、ふと、「仮想ターミナルを立ち上げて戻ってきたらどうだろう?」と思い、試したところ解決しました。
VirtualBoxのHotkey (デフォルトは右Ctrl) + F1 を押します。
私の環境で、 右Ctrl + F1 を押すと以下のようになりました。

きれいに見えます。
ここで、さらに、Hotkey + F7 を押します。
私の環境では、右Ctrl + F7 を押してみました。

なんときれいになりました。
忘れないようにメモとして残しておきます。
Ubuntu 14.04/16.04以降でのexFAT形式のフォーマット
USBメモリは多くの場合、FAT32形式でフォーマットされています。これは汎用性がありますが、4GBの壁があり、4GBをこえるファイルは使うことができません。
WindowsにはNTFS形式があり、これは4GBを超えて保存できますが、MacでNTFSでフォーマットされたUSBメモリを読み込むにはひと手間必要です。
では、WindowsでもMacでもLinuxでも4GB以上のファイルをUSBメモリで扱うにはどうしたらいいでしょうか。
それに対する答えのひとつが exFAT形式です。
exFAT形式は、Microsoftが主にリムーバブルメディア向けに開発したファイルシステムだそうです。WindowsでもMacでも普通に読み込むことができます。
Ubuntuでもソフトウェアを2つ入れればすぐに使えます。それはexfat-fuse と exfat-utilsです。
Ubuntu 14.04の場合は、PPA経由で入れます。
sudo apt-add-repository ppa:relan/exfat sudo apt-get update sudo apt-get install exfat-fuse exfat-utils
Ubuntu 16.04以降では本家から普通に入れられます。
sudo apt-get update sudo apt-get install exfat-fuse exfat-utils
それで、フォーマットの仕方は非常に簡単です。
sudo mkfs -t exfat [ -n 名前 ] デバイス
もしくは
sudo mkfs.exfat [ -n 名前 ] デバイス
mkfs -t exfatも、mkfs.exfatも mkexfatfs へのシンボリックリンクのようです
たとえば、/dev/sdf を DATA と名づけたい場合
sudo mkfs.exfat -n DATA /dev/sdf
となります。
フォーマットが非常に速くて便利です。
クロスプラットフォームで4GB超の大容量ファイルが扱えるのと、フォーマットの速さが魅力的なので今はUSBメモリはとりあえず exFAT にフォーマットしてから使用するようになりました。
Ubuntu 16.04への MRtrix3 インストールスクリプト
先日、ABiSチュートリアルで順天堂大学の鎌形先生から、FSL, FreeSurfer, MRtrix3を組み合わせたコネクトーム解析の素晴らしい講義を聞く機会がありました。
MRtrix3はインストールしなきゃと思いつつできていませんでしたが、せっかくですから、モチベーションが高いうちにインストールしようと思い、Ubuntu 16.04へのインストールを行いました。
http://mrtrix.readthedocs.io/en/latest/installation/linux_install.html
こちらに説明がありますが、これをまとめてみました。
関心のある方はこちらからダウンロードしてみてください。(右クリック→名前をつけて保存)
保存した後、
$ chmod 755 mrtrix3_installer_ubuntu1604.sh $ ./mrtrix3_installer_ubuntu1604.sh
でインストールができます。
ちなみに、上記スクリプトは以下のようになっています。
GitHubからダウンロードし、コンパイルし、.bashrcにパスを通すというシンプルなことをやっています。
#!/bin/bash #Script to setup mrtrix3 for Ubuntu 16.04 #Install prerequisite packages sudo apt-get install git g++ python libgsl0-dev zlib1g-dev libqt4-opengl-dev libgl1-mesa-dev libqt5svg5* libeigen3-dev #Download MRtrix3 source if [ ! -e $HOME/git ]; then mkdir $HOME/git fi cd $HOME/git git clone https://github.com/MRtrix3/mrtrix3.git #Configuration and build cd mrtrix3 ./configure ./build #.bashrc echo >> $HOME/.bashrc echo "#MRtrix3" >> $HOME/.bashrc echo 'export PATH=$PATH:$HOME/git/mrtrix3/bin:$HOME/git/mrtrix3/scripts' >> $HOME/.bashrc
How to make a UEFI-based bootable USB stick with Ubuntu mini.iso
Ubuntu mini.iso is useful when we want to build a system with minimal packages.
It is useful to make a bootable USB stick.
Below is how to make UEFI-based bootable USB stick with Ubuntu mini.iso.
Required package: 7-zip
You can get 7-zip with the following command;
sudo apt install p7zip-full
Now we will use “7z” command.
Two options are needed. “x” for extract and “-o” to specify output directory. If the directory doesn’t exist, 7z creates automatically.
- Extract iso image into a directory
- Extract efi.image under boot/grub
- Copy the contents under “usbdisk” to USB stick
Now I want to extract images into “usbdisk” directory.
7z x -ousbdisk mini.iso
This will make “usbdisk” directory and extract into the directory. Note that no space is allowed between “-o” and target directory. I tried space or quotation, without success.
One more thing. In order to make the USB stick bootable with UEFI, we need to extract efi.img under boot/grub. This can be easily done with the following command. (You don’t have to change directory.)
7z x -ousbdisk usbdisk/boot/grub/efi.img
This command will extract efi.img, which will be “efi” directory under which bootx64.efi and grubx64.efi exist into the usbdisk directory.
Finally we just copy the contents under usbdisk to a USB.
That’s it. Now try to boot from USB disk.
Install igraph in R-studio on Ubuntu 16.04
I tried to install igraph simply by running install.packages(‘igraph’), which resulted in compile error.
Gathering information scatterd on websites, I came to the conclusion.
My Circumstance is as follows;
Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
$ uname -a
Linux vincent 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
R-studio
Version 1.1.383
sudo apt update sudo apt install libssl-dev libcurl4-openssl-dev libxml2-dev
Then running install.packages(‘igraph’) in R-studio succeeded without error.
Ubuntu 16.04+fcitx+mozcで、viでインサートモードになる時は、mozcは起動させず、作業後にESCを押した時には、自動でmozcをOFFにする設定
私は、Ubuntu 16.04 (をカスタマイズしたLin4Neuro 16.04)でfcitx+mozcで日本語入力を行っています。
エディタはvimを利用しています。
多くの方がネットに記載されていますので、詳細は書きませんが、私がvimで日本語文書を書くとき、
- 日本語で入力している時、入力が終わった後、ESCキーを押しても日本語入力の状態のままなので、一度mozcを切ってからでないと、ノーマルモードになれない。
という問題がありました。
この点に関して、私がよく参考にさせていただいている「いくやの斬鉄日記」にまさにこれに関する記事があり、中国語ですが、この問題を解決する .vimrc に記載する設定のリンクが紹介されていました。
早速、以下を ~/.vimrc に記載しました。(中国語のコメントは、英語に変換してあります)
"##### auto fcitx ###########
let g:input_toggle = 1
function! Fcitx2en()
let s:input_status = system("fcitx-remote")
if s:input_status == 2
let g:input_toggle = 1
let l:a = system("fcitx-remote -c")
endif
endfunction
function! Fcitx2zh()
let s:input_status = system("fcitx-remote")
if s:input_status != 2 && g:input_toggle == 1
let l:a = system("fcitx-remote -o")
let g:input_toggle = 0
endif
endfunction
set ttimeoutlen=150
"Leave Insert mode
autocmd InsertLeave * call Fcitx2en()
"Enter Insert mode
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######
これでvimを起動したところ、日本語でいろいろ書いた後に、ESCを押してノーマルモードに戻ると、自動でmozcがoffになりました。やった!という感じです。
しかし、もう少し使っていて、不便に感じることがありました。それは、vimを起動して最初の挿入モードになるときに必ず mozc が立ち上がってしまうことです。日本語の文章を書くときはいいのですが、スクリプトを書くときは邪魔になります。ここは自動じゃないほうがいいなと思いました。
で、上の記載をよくよく見ると
Fcitx2en() というファンクションと
Fcitx2zh() というファンクションがあり、
前者はESCが押された時に自動でinput method (IM)をoffにする機能であり
後者は挿入モードになった時に自動でIMをonにする機能のようです。
私は後者の機能がいらないんだと気づきました。
なので、以下のように、Fcitx2zh()のところを削除しました。
"##### auto fcitx ###########
let g:input_toggle = 1
function! Fcitx2en()
let s:input_status = system("fcitx-remote")
if s:input_status == 2
let g:input_toggle = 1
let l:a = system("fcitx-remote -c")
endif
endfunction
set ttimeoutlen=150
"Leave Insert mode
autocmd InsertLeave * call Fcitx2en()
"##### auto fcitx end ######
こうしたところ、私の期待していたように
- vimでノーマルモード→挿入モードになった時にはIMは起動しない
- 必要時に手動でIMを起動
- ESCを押すと自動でIMをoff
となりました。
これでvimがさらに便利になりました。
自分の備忘録として記載しておきます。
再帰的にファイル名やディレクトリ名にある半角スペースをアンダースコア ( _ )で置き換えるスクリプト: Linux & Mac 対応
シェルスクリプトで作業を自動化しようとするとき、ファイル名やディレクトリ名に半角スペースが入っていると、エラーとなります。
この半角スペースを全部アンダースコア( _ ) で置き換えてあげたいと思いました。
それも、カレントディレクトリだけではなく、再帰的にサブディレクトリにあるものもすべてです。
やっぱり楽したいですから…。特に画像解析をやる場合、DICOMのディレクトリ構造は、かなり奥深くにいくので、再帰的にいけると楽になります。
スマートでないかもしれませんが、以下のようなスクリプトを書いてみました。
replace-space-underscore.shのダウンロード(右クリックで名前をつけて保存)
思考過程を書いていこうと思います。
bashのtips: 直前の引数を利用したいときは !$ もしくは Esc + .
私はこんな作業をよくします。
- あるファイルをディレクトリAにコピー
- ディレクトリAに移動
この際
$ cp something /path/to/A $ cd /path/to/A
とするわけですが、この /path/to/A を2回うつのはめんどくさいので、簡単な方法がないかを調べてみると、
!$
という特殊変数があることがわかりました。
しかし、しょっちゅう忘れるので、覚え方を考えてみました。
bashでは、履歴を知りたいときに、!を使います。
たとえば
$ history
でコマンド履歴を調べ、その1457番目のコマンドを再度実行したいときは
$ !1457
とすればいいわけですね。
で、$ですが、正規表現において、$は「行の最後」を意味します。
この2つを組み合わせれば
「履歴において一番最後のもの」
と考えれば、 !$
は覚えやすいなと思いました。
自分の思考過程を備忘録として書いておきます。
<29/July/2020 追記>
コメントに Esc + . でもいけるというご指摘をいただきました。
これは、viの動作をイメージすると覚えやすいですね。
vi は コマンドモードで、. は繰り返しになるわけですので、
bashでEscでviのコマンドモードに入ったような感じになって、.で前回の引数の繰り返しというイメージで覚えたらいけそうです。
Update of Lin4Neuro (27 Jun 2017)
Lin4Neuro was updated.
- Fixed the bug of installer crash
- All Neuroimaging software is up-to-date. FSL remains 5.0.9 since 5.0.10 is not available yet on Neurodebian.
- Tutorial by Prof. Chris Rorden is put under home directory. Anybody can go through tutorial without further download.
- Now Lin4Neuro is UEFI compatible.
You can get the latest version from here.
Lin4Neuroのアップデート (27 Jun 2017)
Lin4Neuroのアップデートを行いました。
- Ubuntu 16.04をベースに、インストーラーがクラッシュするバグを修正しました
- 画像解析ソフトを最新版にしました。FSLはUbuntu版はまだ5.0.10がリリースされていないため、5.0.9のままです。
- Chris Rorden教授のチュートリアルをわかりやすい場所に配置しました。
- UEFI対応となっており、UEFI対応PCにもインストール可能となりました。
ここから入手できます。
Pubmedの結果をviで整形する(不要な改行の削除)
Pubmedはとても便利ですが、いくつか不便なこともあります。
そのうちのひとつに、summary (text) の扱いです。
viを使ってなんとかきれいにできないかと試行錯誤した結果です。
先に結論を示すと、以下でできます。
:%s/\n\([A-Za-z0-9]\)/ \1/
以下がそのプロセスです。
Lin4Neuroのアップデート (31 Mar 2017)
Lin4Neuroのアップデートを行いました。
主な更新点は以下になります。
- Ubuntu 16.04をベースにするバージョンを発表しました。(ただし、インストーラーにバグがあるため、現在調整中です。)Ubuntu 14.04版も続けてメンテナンスしていきます。
- 画像解析ソフトをすべて最新バージョンにアップデートしました。
- GitHub上にLin4Neuroを作成するスクリプトを公開しました。
- 起動時画面のロゴに少し修正を加えました。Lin4NeuroがUbuntuのどのバージョンに基づいているかがひと目でわかります。
https://github.com/kytk/lin4neuro-xenial
これを用いればLin4Neuroを自分の使いたいようにカスタマイズしていただくことも可能かと思います。
最新版のLin4Neuroは こちらからどうぞ。
Update of Lin4Neuro (31 Mar 2017)
Lin4Neuro is updated.
- Now Lin4Neuro is based on Ubuntu 16.04. (I’ll keep maintenance of 14.04 Version too)
- All of the neuroimaging software packages are up-to-date.
- Building scripts of Lin4Neuro is publicly available on GitHub.
- I made some changes to the Lin4Neuro logo on splash. You will find L4N you are using is based on Ubuntu 14.04 or later.
https://github.com/kytk/lin4neuro-xenial
You can make your version of Lin4Neuro based on the repository above. I wrote instruction how to use in the repository.
You can download the latest Lin4Neuro from here.
BashからMatlabスクリプトを実行する方法
先日、ある方と「BashからMatlabを呼び出せないだろうか」という話をしていました。もし、これができたら、シェルスクリプトから、Matlabを呼び出せるので、シェルとMatlabを完全に連携できるわけです。
結論としては、以下でできました。
- Short answer
Matlabのスクリプト名を sample_code.m とすると、以下でできます。
$ matlab -nodesktop -nosplash -r 'sample_code; exit'
コツは2つです。
- スクリプト名ではなく、コマンドとして指示するため、.mは外す
- Matlabから抜けるために exit を追加する
シーケンスを自動判別し、ファイル名を自動リネームするDICOM→NIFTI変換スクリプト
本日、第19回ヒト脳機能マッピング学会で発表したのですが、ブログのタイトル通り、シーケンスを自動判別し、ファイル名を自動でリネームするDICOM→NIFTI変換スクリプトを書いてみました。
MacおよびLinuxに対応しています。
必要なソフトウェアは以下の2つです。
- MRIcron
- FSL
パスが通っていることが必要です。
FSLも同様にパスが通っていることが必要です。
このスクリプトは以下から入手可能です。(右クリックで「名前をつけて保存」で保存できます。)
https://raw.githubusercontent.com/kytk/shellscripts/master/ren-dcmcnv.sh
- インストール
- 使い方
- フォルダの準備
- スクリプトの実行
- スクリプトが行うこと
- ワーキングディレクトリに “DICOM”, “nifti” ディ
レクトリを作成します。 - wd内にできたDICOMディレクトリに移動します。
- DICOM ディレクトリ内で dcm2nii を実行し、NIFTIファ
イルを生成します。 - fslhd を用いてNIFTIファイルのヘッダー情報を取得します。
- 以下のルールに基づき、3次元T1強調画像、fMRI画像、DTI画像を判別します。
- 3次元T1MRI: 画像の第2次元≧256, 第3次元>100, TE<6msec; (V_)
- fMRI: 画像の第4次元>100; (F_)
- DTI: 画像の第4次元が8以上100 未満 (D_)
- ディレクトリ名を取得し、ファイル名のベースとし、それぞれの接頭辞に識別記号を付加します。
- 変換したファイルをniftiディレクトリに移動します。
インストールですが、パスが通っているディレクトリに保存していただくだけです。
使い方はとてもシンプルです。
最初に、作業用フォルダを準備します。その中に、各被験者のフォルダを準備します。フォルダ名がとても重要です。このスクリプトはフォルダ名をファイル名のベースに使うからです。
たとえば、被験者IDがsubj01ならば、フォルダ名をsubj01とします。その中にその被験者のDICOMファイルをすべて放り込みます。(ディレクトリ構造になっていてもなっていなくてもかまいません)
ターミナルを起動し、作業用フォルダに移動します。
そして、以下をタイプします。
$ ren-dcmcnv.sh
これだけです。
スクリプトは以下のことを行います。フォルダ=ディレクトリです。
よかったら試してみてください。
Customization of Xubuntu 16.04 and system-wide application
Good point of linux is that users can easily customize the appearance of user interface.
Below is how we can customize Xubuntu 16.04 and apply the changes system-wide.