3D マウス
超音波によって機能する 3D マウスはバットや空飛ぶマウス、あるいは杖とも呼ばれ、三次元的に自在に操作することができます。最もよく知られた製品として1990年代初頭に登場した 3DConnexion/Logitech の SpaceMouse などがあります。
詳しくは https://www.3dconnexion.com/products/spacemouse.html#panel-whatis を見てください。
プロプライエタリドライバー
3D マウスを USB 端子に接続してください。認識されているかどうか lsusb
を使ってチェックします:
$ lsusb
Bus 003 Device 002: ID 046d:c626 Logitech, Inc. 3Dconnexion Space Navigator 3D Mouse
openmotif をインストールしてください。
libXm.so.4
から libXm.so.3
にシンボリックリンクを張ります:
# ln -s /usr/lib/libXm.so.4 /usr/lib/libXm.so.3
ドライバーには /var/run/utmp
からユーザー名を取得できず "failed to get user" エラーを出力するという問題があります。
以下のプログラムをコンパイルしてください。ドライバーが読み込める方法で /var/run/utmp
にユーザー名を追加します。
3dmouse.c
/* source: https://forums.gentoo.org/viewtopic-t-609224.html * http://www.3dconnexion.com/forum/viewtopic.php?t=1039 */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <utmpx.h> int main(int argc, char ** argv) { if (argc != 2) { fprintf(stderr, "Need a name to put in the structure\n"); exit(1); } struct utmpx u; memset(&u, 0, sizeof(u)); u.ut_type = USER_PROCESS; u.ut_pid = getpid(); strcpy(u.ut_id, ":0"); strcpy(u.ut_line, ":0"); strcpy(u.ut_user, argv[1]); setutxent(); pututxline(&u); endutxent(); }
$ gcc 3dmouse.c -o 3dmouse # ./3dmouse root
次の URL から Linux ドライバーを /tmp
にダウンロードしてください: https://www.3dconnexion.com/service/drivers.html
インストールスクリプトを展開して実行してください:
$ tar xfz 3dxware-linux-v1-5-2.i386.tar.gz install-3dxunix.sh # ./install-3dxunix.sh Password: This installs 3DxWareUnix V1.5.2 on this machine. Continue? (y/n) [y] y Choose one of the following platforms: 1. HP-UX 2. Solaris 3. AIX 5 4. Linux 5. Exit Please enter your choice (1-5)[4]: 4 Installing files for 3DxWare for Unix / linux...... Uninstalling a running driver. Please wait ... Done. Converting default configs V5.x to V5.3. (User configs will be converted when used) Please wait a moment... Converting configs... found 27 configurations Configuration file Configuration name Version Status /etc/3DxWare/UGSNX2_01.scg ("UGS NX 2 config 01 ") 5.3 Ok. /etc/3DxWare/4DNav.scg ("4D Navigator ") 5.3 Ok. /etc/3DxWare/UGSNX5_02.scg ("UGS NX 5 config 02 ") 5.3 Ok. /etc/3DxWare/CatiaV5_02.scg ("CATIA V5 config 02 ") 5.3 Ok. /etc/3DxWare/Maya2011.scg ("Maya 2011 ") 5.3 Ok. /etc/3DxWare/CatiaV4_01.scg ("CATIA V4 ") 5.3 Ok. /etc/3DxWare/Patran_01.scg ("Patran ") 5.3 Ok. /etc/3DxWare/UGSNX4_01.scg ("UGS NX 4 config 01 ") 5.3 Ok. /etc/3DxWare/Pr(...)ire_02.scg ("ProE Wildfire config 02 ") 5.3 Ok. /etc/3DxWare/Pr(...)ire_01.scg ("ProE Wildfire config 01 ") 5.3 Ok. /etc/3DxWare/UGSNX2_02.scg ("UGS NX 2 config 02 ") 5.3 Ok. /etc/3DxWare/CatiaV5_03.scg ("CATIA V5 config 03 ") 5.3 Ok. /etc/3DxWare/UGSNX3_02.scg ("UGS NX 3 config 02 ") 5.3 Ok. /etc/3DxWare/default_10.scg ("Driver Protocol 1.0 ") 5.3 Ok. /etc/3DxWare/CADDS_R14.scg ("CADDS5 R14 + ") 5.3 Ok. /etc/3DxWare/CatiaV5_01.scg ("CATIA V5 config 01 ") 5.3 Ok. /etc/3DxWare/DMUNav.scg ("DMU Navigator ") 5.3 Ok. /etc/3DxWare/UGSNX4_02.scg ("UGS NX 4 config 02 ") 5.3 Ok. /etc/3DxWare/Enovia_VPM.scg ("Enovia VPM ") 5.3 Ok. /etc/3DxWare/UGSNX5_01.scg ("UGS NX 5 config 01 ") 5.3 Ok. /etc/3DxWare/ICEM_MED.scg ("ICEM MED ") 5.3 Ok. /etc/3DxWare/CADDS_R13.scg ("CADDS5 -R13 ") 5.3 Ok. /etc/3DxWare/DVise.scg ("DVise ") 5.3 Ok. /etc/3DxWare/Op(...)alizer.scg ("Optegra Visualizer ") 5.3 Ok. /etc/3DxWare/UGSNX3_01.scg ("UGS NX 3 config 01 ") 5.3 Ok. /etc/3DxWare/IDEAS_01.scg ("IDEAS ") 5.3 Ok. /etc/3DxWare/default.scg ("Any Application ") 5.3 Ok. Done. Do you want 3DxWareUnix being started with every login (from the /etc/inittab)? (y/n) [y] n Please start the driver manually. [/etc/3DxWare/daemon/3dxsrv -d <port>] **************************************************************** For testing purposes you can find the demos xcube and xvalues at /tmp ****************************************************************
以下のコマンドを実行することでドライバーを手動で起動できます (USB 版):
# /etc/3DxWare/daemon/3dxsrv -d USB
これで Arch Linux で 3D マウスが動作するはずです。ドライバーのアーカイブからデモを解凍してテストできます:
$ tar xfz 3dxware-linux-v1-5-2.i386.tar.gz xcube $ ./xcube
オープンソースドライバー
spacenav プロジェクトによってメンテナンスされている 3Dconnexion デバイスのオープンソースドライバーも存在します。残念ながら対応しているアプリケーションはごく限られています。spacenav ドライバーをサポートしている著明なソフトウェアとしては 3D 作成スイートの Blender が唯一です。オープンソースドライバーを使用するには以下の条件を満たす必要があります:
- デバイスがカーネルによって入力デバイスとして認識されていること。
- spacenavd デーモンを動作させること。
- spacenav のサポートを有効にしてアプリケーションをコンパイルすること (公式リポジトリの blender はサポートが有効になっていません)。
最初の要件はデバイスを接続すれば自動的にクリアです。/proc/bus/input/devices
内のデバイスを見ることで確認できます:
$ grep 3Dconnexion /proc/bus/input/devices N: Name="3Dconnexion SpaceNavigator"
2番目の要件を満たすには AUR から libspnav と spacenavdAUR をインストールしてください。テストとしてフォアグラウンドモードでデーモンを起動してみると良いでしょう。以下のように出力されるはずです:
# spacenavd -v -d Spacenav daemon 0.5 Device detection, parsing /proc/bus/input/devices using device: /dev/input/event21 device name: 3Dconnexion SpaceNavigator trying to open X11 display ":0" XAUTHORITY=/home/user/.Xauthority
CTRL-C を押すことでデーモンを終了できます。バックグラウンドでは systemd で spacenavd.service
を使うことで起動できます。
後は対応アプリケーションさえあれば 3D マウスを使うことができます。
公式リポジトリの blender パッケージは spacenav のサポートがデフォルトで有効になっています。
手動でビルドするときに spacenav のサポートを有効にしたい場合、libspnav をインストールしてから ABS から Blender をビルドすることで NDOF(=spacenav) のサポートが自動的に有効になってビルドが行われます。
ビルドした Blender をインストールしたら 3D マウスを試してみてください:
$ blender ndof: using SpaceNavigator