Linuxホスト環境のVirtualBoxでUSBを使う、今やたったひとつの手順+共有フォルダ

LinuxホストのVirtualBoxで、ゲストOSからUSB接続を使えるようにする方法


環境は、Ubuntu 12.04 Desktop および VirtualBox 4.2.8 (Oracleリポジトリ版) です。
Ubuntuのバージョンはともかく、VirtualBox の Version 4.x では、この方法でUSBが使えるようになります。

ホストOSにて、ユーザをvboxusersグループに追加する。
コマンドは
sudo gpasswd -a username vboxusers
以上。

以下、蛇足です。

VirtualBoxを本格的に使い始めたのは、2010年頃だったかと思います。当時のVirtualBoxはversion2.xくらいだったような気がします(もう記憶が曖昧)。当然ながら、USB2.0サポートがアドオン化される前のことでした。

当時(いつのことだか思い出せない)、USB接続を使えるようにするには、/etc/fstab に書き込みする必要がありました。
今も、ネット上で検索をかけると、出てきます。
上に書いたコマンドが必要であることを書いたサイトはあっても、/etc/fstabへの設定が、 vbox 4.x の今や不要であることを追記したサイトはあまりないように見えます。
あと、この記事を書くにあたって検索したら見つけた英語のサイトに、Ubuntuの9.04では /etc/fstab への設定記述が必要だった、と読み取れる内容が書いてありますね。
ところで、わたしの環境では問題ないのに12.04にいろいろ書いてあるのは何故だ…。

VirtualBoxの設定で、USBフィルタの追加が必要と書いてあるサイトも見かけるのですが、私の環境では設定していません。それでも、ゲスト側でUSBが使えています。
フィルタの項目、昔は設定していた覚えがあります。いつのバージョンだったかは覚えていませんが。



初心者時代にいくつもの試行錯誤を繰り返し、過去のバージョンでは複数箇所の設定が面倒だったゲスト側でのUSB接続利用は、今やたったひとつの手順で可能となりました。

Virutalbox USBアクセス失敗 警告ダイアログ
グループへの追加を忘れると、警告ダイアログで教えてくれる


それともう一つ。

Linuxゲストで共有フォルダにアクセスする方法、など

Linuxゲスト(Ubuntu)にて。
VirtualBoxの共有フォルダ機能を利用するには、ゲスト側に2つの準備が必要です。
1つめは、GuestAdditionアドオンの導入。
2つめは、ゲストOS上ユーザのグループ追加です。

具体的には、ゲスト環境で、vboxsfグループにユーザを追加します。
sudo gpasswd -a username vboxsf
以上。


以下、蛇足。

覚える前は、グループ名の最後をよくfs(ファイルシステム)と間違えていたのですが、よく考えてみたら、SharedFolder(共有フォルダ)の略かもしれないと思い至りました。
(というか、さっき思いついた。なぜ3年も気づかなかったのか。)
私の場合、共有フォルダを設定する際、「自動マウント(A)」と「永続化する(M)」にはいつもチェックを入れています。
すると、共有フォルダはゲストの/media以下に、"sf_共有フォルダ名"の名前でマウントされて、中のファイルにアクセスできるようになります。
頻繁にアクセスするなら、
ln -s /media/sf_共有フォルダ名 ~
などとして、ホームディレクトリにシンボリックリンクを貼ります。作業が楽になります。

それと、Ubuntu ServerではGuestAdditionのインストールに、ひと手間が必要です。
CDが自動マウントされないので、[mkdir ~/cd]などでマウント先ディレクトリを作ってから[mount /dev/sr0 ~/cd]のようなコマンドでマウントしてやる必要があります。
cdコマンドで中に入って[sudo bash ./VBoxLinuxAddition.sh]を実行することでインストールできます。
gccなどが必要なのに無いと言われるので、build-essentialパッケージの導入もお忘れなく。
古くて良いなら、aptからGuestAdditionのパッケージを導入するのが、自動化もできて楽ですね。


Linuxサーバで日本語環境を使う(Debian/Ubuntu)


Debian 6.0.6 (squeeze) と Ubuntu 12.04.2 Server のサーバ環境で、ターミナルから日本語を使用するための設定です。


結論として、
・Debianではjfbterm、Ubuntuではfbtermを導入すると、日本語表示ができる。
・日本語入力がしたければuim-fepとuim-anthyが必要。
・そしてそれぞれ、設定を行う必要がある。
以下はその手順ということになります。

Web上に情報は多くあるのですが、バージョンの違いによるのか、書いてあるとおりに設定しても動かない場合が多く...。このページは2013年環境における、わたしなりのまとめとお考えください。


なお、最初にお断りしておきますが、サーバ環境というのは、無用の不具合を避けるためにできるだけアプリケーションの導入を避けるのが普通とされているようです。
私の場合、Windowsクライアントも利用するSAMBAサーバの管理をする必要もあったため、やむおえず(?)日本語環境を導入しましたが、そうでない場合は、英語環境のまま運用すべきかと思います。
英語のほうがエラーメッセージで検索しやすい場合もあるため、そもそもサーバに日本語環境は不要という見方もできます。
同じ理由から、ログイン時に日本語ターミナル環境を自動で起動する設定は、しないほうが無難と思われます。Debianでの設定方法は書いてありますが、わたしはできることを確認しただけで、使ってはいません。


手順に、フレームバッファを使用するグラフィック関連のモジュールの有効化が含まれているため、設定の実験環境を晒しておきます。
VirtualBox(4.2.8)にて、ゲストに設定を行いました。
OSは(ホスト含む)すべて64Bit。ゲストの3Dアクセラレーションを有効化。
GuestAdditionは追加導入せず、OSデフォルト搭載のままです。
ホストはGTX520ボードを搭載したUbuntu12.04.2デスクトップです。あくまで念の為。



##Debian 6.0.6 (squeeze) サーバにて、ターミナル環境での日本語環境を設定する


#導入

jfbtermの起動以外は、ほぼすべて管理者権限が必要な操作なので、rootになって作業する。

aptitude install jfbterm -y

手動で以下のコマンドを打つと、日本語表示可能なターミナル環境になる。
(modprobeは要管理者権限)
modprobe vga16fb
jfbterm -q


日本語ターミナル環境には kon2(UTF-8非対応との古い情報あり。実際kon2は試したら化けた。),bterm(CentOS向け?),mlterm という選択肢もあるらしい。



#日本語入力のために、uim-anthyをインストールしておく。

aptitude install uim-fep uim-anthy -y

umi-fepをデフォルト設定のまま起動すると、Spaceキーが入力切り替えに使用される。
(半角スペースが打てなくなることで、コマンド操作も難しい状態になる)
そこで、設定ファイル /usr/share/uim/generic-key-custom.scm の末尾にある2行を、
(define-key generic-on-key? '(" "))
(define-key generic-off-key? '(" "))
から、
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))
に書き換える。
コマンド[uim-fep]を実行すると、uim-fepがコンソールに常駐するようになる。
これにより、半角/全角入力が、Ctrl+Spaceで切り替わるようになる。

uim-prime入れると予測変換されるようになるらしい。



#自動化

モジュールのロードは以下のコマンドで起動時に自動で行われるように設定できる。
echo vga16fb >> /etc/modules

jfbtermの起動は、.bashrcに記述するが、そのまま書いても上手く行かない。
ログイン時にjfbtermおよびuim-feqを自動で起動するには、.bashrcの末尾に、以下のように記述する。
case $TERM in
linux)
if [ -c /dev/fb0 ]; then
jfbterm -q -e uim-fep -u anthy
exit
fi
;;
esac
(ログインユーザの.bashrcに設定すること。ログイン後にsuでrootになっても、jfbtermと日本語表示は引き継がれる。)



#(蛇足)日本語以外の言語でインストールした場合

言語設定は環境変数となっており、これは
env | grep LANG
で確認できます。また、言語設定(環境変数)は以下の3つの方法で変更できます。

1. そのコマンドだけ変更(例えば、" ls -l " コマンド)
LANG=C ls -l

2. そのターミナルだけ変更(再起動などすると元に戻る)
export LANG=C


3. 永続的に言語設定を変更する
dpkg-reconfigure locales
コマンドにて、"ja_JP.UTF_8 UTF-8"に変更する。


キーボードの変更:
以下のコマンドでキーボード設定を変更できる。
dpkg-reconfigure keyboard-configuration
にて、"generic 105key (Intl) PC" "japan"を選択する。
(これで日本語106キーボードになる。)




## ubuntu(Ubuntu 12.04.2)サーバの日本語環境構築


#Debianとの違い

jfbtermはexitコマンドを使用した際に不具合が起こるという情報があり、fbtermを使用する。
(試したら実際に入力を受け付けない状態になった。)

設定について、vesafbやfbconを有効にする必要はなかった。


#fbterm uim-fep uim-anthy unifontを導入



このままではfbtermで日本語部分が空白になる(表示されない)ので、
.fbtermrcを以下のように書き換え
(編集するには、一度fbtermを起動する必要がある。起動前にはこのファイルが存在しない。)
(また、この設定ファイルは管理者権限がなければ編集できない。)
font-names=mono
font-size=12

font-names=mono,unifont
font-size=16
へ。


そのままではuim-fepによる日本語入力ができないので、
/usr/share/uim/generic-key-custom.scm ファイルの中を、以下のように変更
(define-costum 'generic-on-key '("zennkeku-hankaku" "<Shift> "))
(define-costum 'generic-off-key '("zennkeku-hankaku" "<Shift> "))
から
(define-costum 'generic-on-key '("<Control> " "zennkeku-hankaku" "<Shift> "))
(define-costum 'generic-off-key '("<Control> " "zennkeku-hankaku" "<Shift> "))
へ。


それぞれ起動する(fbtermの起動には管理者権限が必要)
sudo fbterm
uim-fep



#自動起動する場合(できなかった)

Ubuntuでfbtermをログイン時に自動起動する方法はわかりません。
たぶんオプションが違うのではないかと思うのですが、自分が使わないということもあり、自動起動の方法は、現在、探索中。

なので以下は、ダメだった試行の断片です。


fbtermに管理者が必要なのはfb0に権限が必要なのが理由なので、udevルールを書けばよい、とのこと。
vi /etc/udev/rules.d/10-local.rules に、
KERNEL=="fb0", OWNER="username", MODE="0640"
と書きこむ。
カーネルモジュールとか設定した環境では、この設定を追記したらディスプレイ描画がおかしくなったので、気を付けること。

.bashrcへ記述
case $TERM in
linux*)
fbterm uim-fep
;;
*)
;;
esac
fbterm起動時に、上にエラー表示が出るが、使用可能。



この設定はログインできなくなったからしない。
~/.profile
exec /usr/bin/fbterm /usr/bin/uim-fep

v86dインストール
/etc/modulesへ uvesafb・fbconの追記
などは効果がなかった。
単に.bashrcの記述にsudoを付けるだけでもよい。
その場合、ログイン時に管理者パスワードを要求され、エラー表示が出る。その他は上手く行く。





jsのasyncなメソッドをfor,loop内で同期的に呼び出す

async/awaitを使ったjavascriptのコードをnodejsで使用する際、非同期呼び出しとなっている関数をloopの中で動機呼び出しする方法。 この前かなり真剣にPromiseのドキュメントを読んで、これをいずれ使うことになるのか、使いこなすの大変そうだな、と思っ...