3D マウス

提供: ArchWiki
2016年11月26日 (土) 02:15時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

超音波によって機能する 3D マウスはバットや空飛ぶマウス、あるいは杖とも呼ばれ、三次元的に自在に操作することができます。最もよく知られた製品として1990年代初頭に登場した 3DConnexion/Logitech の SpaceMouse などがあります。

詳しくは http://www.3dconnexion.com/products/what-is-a-3d-mouse.html を見てください。

ノート: 以下の設定は一番ベーシックなモデル (Space Navigator) で動作することを確認しています。

プロプライエタリドライバー

3D マウスを USB 端子に接続してください。認識されているかどうか lsusb を使ってチェックします:

$ lsusb
Bus 003 Device 002: ID 046d:c626 Logitech, Inc. 3Dconnexion Space Navigator 3D Mouse

openmotif をインストールしてください。もしくは lesstif が必要な場合、openmotif から libXm.so.4 ライブラリを抽出します:

# pacman -Sw openmotif # download openmotif to cache, do not install
# tar xJOf /var/cache/pacman/pkg/openmotif-* usr/lib/libXm.so.4.0.3 > libXm.so.4
# mv libXm.so.4 /usr/lib/libXm.so.4

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: http://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 にダウンロードしてください: http://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 が唯一です。オープンソースドライバーを使用するには以下の条件を満たす必要があります:

  1. デバイスがカーネルによって入力デバイスとして認識されていること。
  2. spacenavd デーモンを動作させること。
  3. spacenav のサポートを有効にしてアプリケーションをコンパイルすること (公式リポジトリの blender はサポートが有効になっていません)。

最初の要件はデバイスを接続すれば自動的にクリアです。/proc/bus/input/devices 内のデバイスを見ることで確認できます:

$ grep 3Dconnexion /proc/bus/input/devices
N: Name="3Dconnexion SpaceNavigator"

2番目の要件を満たすには AUR から libspnavspacenavdAUR をインストールしてください。テストとしてフォアグラウンドモードでデーモンを起動してみると良いでしょう。以下のように出力されるはずです:

# 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 マウスを使うことができます。

spacenav のサポートを有効にして Blender をビルド

残念ながら公式リポジトリの blender パッケージは spacenav のサポートが有効になっていません。libspnav をインストールしてから ABS から Blender をビルドすることで NDOF(=spacenav) のサポートが自動的に有効になってビルドが行われます。

ビルドした Blender をインストールしたら 3D マウスを試してみてください:

$ blender
ndof: using SpaceNavigator

参照