You are not logged in.

#1 2011-04-20 18:23:18

UFOKatarn
Member
Registered: 2010-08-29
Posts: 30

[REQUEST] 3DConnexion 3DXWare driver

Dear fellow Arch users.

Since the 64bit version of Blender does not support the open-source "spacenav" drivers, I am making a humble request for someone to make a PGKBUILD file for the official 3DConnexion driver. Strange that it is not in the AUR already.

I would have created the PKGBUILD myself, however I have absolutely no idea what to write into most of the file's sections, especially the build() and package() sections. I have filled out the parts of file that I know how though:

# Maintainer: Someone Nice <someonenice@helpful.com>
pkgname=3dxware
pkgver=1.5.2
pkgrel=1
pkgdesc="Official 3DConnexion driver for 3Dmice like SpaceNavigator"
arch=('x86_64')
url="http://www.3dconnexion.com/service/drivers.html"
license=('Proprietary')
groups=()
depends=()
makedepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
changelog=
source=(http://www.3dconnexion.com/index.php?eID=sdl&ext=tx_iccsoftware&oid=ac9d4181-2f72-fcca-709a-4c4867b0e396&filename=3dxware-linux-v1-5-2.x86_64.tar.gz)
noextract=()
md5sums=() #generate with 'makepkg -g'

build() {
  cd "$srcdir/$pkgname-$pkgver"

  ./configure --prefix=/usr
  make
}

package() {
  cd "$srcdir/$pkgname-$pkgver"

  make DESTDIR="$pkgdir/" install
}

Thank you very much, anyone who both has the knowledge to do this and is willing to help. Many Arch users will be greteful for it smile.

Regards,
UFOKatarn

Last edited by UFOKatarn (2011-04-20 18:24:17)

Offline

#2 2011-04-21 20:16:31

UFOKatarn
Member
Registered: 2010-08-29
Posts: 30

Re: [REQUEST] 3DConnexion 3DXWare driver

The installation instructions are as follows:

        Please make sure you have installed the 75 and/or 100DPI fonts for X11.
        The packages are named for example:
            xorg-x11-fonts-75dpi-7.2-3.fc8,
            xorg-x11-fonts-100dpi-7.2-3.fc8
            or
            xorg-x11-fonts-ISO8859-1-100dpi-7.2-8.fc11.noarch,
            xorg-x11-fonts-ISO8859-1-75dpi-7.2-8.fc11.noarch

        Packages names may vary depending on the distribution (and version) you are using!


The files for the driver are provided with the following archive:

    Linux:
        3dxware-linux-v1-5-2.x86_64.tar.gz



Please save the file 3dxware-linux-v1-5-2.x86_64.tar.gz into the /tmp directory
and extract and run the script install-3dxunix.sh:

    tar xfz 3dxware-linux-v1-5-2.x86_64.tar.gz install-3dxunix.sh
    ./install-3dxunix.sh

If you don't choose during installation the possibility to start the driver during login from the
/etc/inittab please make sure the driver is started before you launch your application.


For the USB devices start the driver with the following command:

    Linux:
        /etc/3DxWare/daemon/3dxsrv -d usb
    


For the serial devices start the driver with:

    /etc/3DxWare/daemon -d /dev/<serialport>
        where <serialport> is the name of your serial port to which the device is attached.
        Example: /etc/3DxWare/daemon/3dxsrv -d /dev/ttyS0


For the start of the driver from the /etc/inittab the following line is added:
    3dx:234:respawn:/etc/3DxWare/daemon/3dxsrv -d <port> </dev/null >/dev/null 2>&1
        where <port> is the name of the port to which the device is attached.



Demos:

    After unpacking 3dxware-linux-v1-5-2.x86_64.tar you can find two demos:
    The cube demo: /tmp/xcube and
    a value demo:  /tmp/xvalue
    
    Those are two simple demos that work with the setting "Any Application". You may copy the
    binaries to your favourite location for binaries.
    

Udev-Scripts:

    After unpacking 3dxware-linux-v1-5-0.i386.tar you can find two scripts:
    Start script "udev_3DxSrvStart": /tmp/udev_3DxSrvStart 
    Udev rule "85-3DX_SPP.rule" for SpacePilot PRO: /85-3DX_SPP.rule
    
    Put the rule file in "/etc/udev/rules.d/" and the start script into "/etc/3DxWare/daemon".
    These locations may vary depending on the distribution used and installation favours.
    Thus the rule file and the start scricpt may to be modified to refelct these indifidual environment.

Offline

#3 2011-04-21 20:18:48

UFOKatarn
Member
Registered: 2010-08-29
Posts: 30

Re: [REQUEST] 3DConnexion 3DXWare driver

And here is the install script:

#!/bin/sh

# ************************************************************************
# *     install script for 3DxWare for Unix release version 1.5.2
# *                         (C) 3Dconnexion 2010
# *                         www.3dconnexion.com
# ************************************************************************

PWD="/bin/pwd"
UNAME="/bin/uname"
UNAME_M="/bin/uname -m"
UNAME_P="/bin/uname -p"
UNAME_R="/bin/uname -r"
MACHINE=`$UNAME_M`
WHOAMI="/usr/bin/whoami"
USER=`$WHOAMI`
TMP="/tmp"

if [ -x "/sbin/init" ]
then
    INIT_Q="/sbin/init q"
elif [ -x "/usr/sbin/init" ]
then
    INIT_Q="/usr/sbin/init q"
else [ -x "/etc/init" ]
    INIT_Q="/etc/init q"
fi

if [ -x "/bin/echo" ]
then
    ECHO="/bin/echo"
else [ -x "/usr/bin/echo" ]
    ECHO="/usr/bin/echo"
fi

if [ -r "INSTALL-3DXUNIX.SH;1" ]
then
    HPUX_TGZ=3DXWARE-HPUX-V1-5-2.TGZ\;1
    HPUX_TAR_GZ1=3DXWARE-HPUX-V1-5-2.TAR.GZ\;1
    HPUX_TAR_GZ=3dxware-hpux-v1-5-2.tar.gz
    HPUX_TAR=3dxware-hpux-v1-5-2.tar
elif [ -r "INSTALL_3DXUNIX.SH;1" ]
then
    HPUX_TGZ=3DXWARE_HPUX_V1_5_2.TGZ\;1
    HPUX_TAR_GZ1=3DXWARE_HPUX_V1_5_2.TAR.GZ\;1
    HPUX_TAR_GZ=3dxware_hpux_v1_5_2.tar.gz
    HPUX_TAR=3dxware_hpux_v1_5_2.tar
elif [ -r "install_3dxunix.sh" ]
then
    HPUX_TGZ=3dxware_hpux_v1_5_2.tgz
    HPUX_TAR_GZ1=3dxware_hpux_v1_5_2.tar.gz
    HPUX_TAR_GZ=3dxware_hpux_v1_5_2.tar.gz
    HPUX_TAR=3dxware_hpux_v1_5_2.tar
elif [ -r "install_3dxunix.sh;1" ]
then
    HPUX_TGZ=3dxware_hpux_v1_5_2.tgz\;1
    HPUX_TAR_GZ1=3dxware_hpux_v1_5_2.tar.gz\;1
    HPUX_TAR_GZ=3dxware_hpux_v1_5_2.tar.gz
    HPUX_TAR=3dxware_hpux_v1_5_2.tar
elif [ -r "install-3dxunix.sh;1" ]
then
    HPUX_TGZ=3dxware-hpux-v1-5-2.tgz\;1
    HPUX_TAR_GZ1=3dxware-hpux-v1-5-2.tar.gz\;1
    HPUX_TAR_GZ=3dxware-hpux-v1-5-2.tar.gz
    HPUX_TAR=3dxware-hpux-v1-5-2.tar
else [ -r "install-3dxunix.sh" ]
    HPUX_TGZ=3dxware-hpux-v1-5-2.tgz
    HPUX_TAR_GZ1=3dxware-hpux-v1-5-2.tar.gz
    HPUX_TAR_GZ=3dxware-hpux-v1-5-2.tar.gz
    HPUX_TAR=3dxware-hpux-v1-5-2.tar
fi


AIX_TAR_GZ=3dxware-aix5-v1-5-2.tar.gz
AIX_TAR=3dxware-aix5-v1-5-2.tar

if [ `$UNAME_M` = "x86_64" ]
then
    LINUX_TAR_GZ=3dxware-linux-v1-5-2.x86_64.tar.gz
     LINUX_TAR=3dxware-linux-v1-5-2.x86_64.tar
else
    LINUX_TAR_GZ=3dxware-linux-v1-5-2.i386.tar.gz
    LINUX_TAR=3dxware-linux-v1-5-2.i386.tar
fi


if [ `$UNAME` = "SunOS" ]
then
    if [ `$UNAME_P` = "sparc" ]
    then
        SOLARIS_TAR_GZ=3dxware-solaris-v1-5-2-sparc.tar.gz
         SOLARIS_TAR=3dxware-solaris-v1-5-2-sparc.tar
    else
        SOLARIS_TAR_GZ=3dxware-solaris-v1-5-2-x86.tar.gz
        SOLARIS_TAR=3dxware-solaris-v1-5-2-x86.tar
    fi
fi

# ************************************************************************
# *     CLEAR
# ************************************************************************
CLEAR ()
{
    $ECHO ""
    $ECHO ""
    $ECHO ""
    $ECHO ""
    $ECHO ""
    $ECHO ""
    $ECHO ""
    $ECHO ""
    $ECHO ""
}
# ************************************************************************
# *     FatalError
# ************************************************************************
FatalError ()
{
    $ECHO ""
    $ECHO "Installation failed!"
    $ECHO ""
    exit 1
}
# ************************************************************************
# *     NormalError
# ************************************************************************
NormalError ()
{
    $ECHO ""
    $ECHO "Installation aborted."
    $ECHO ""
    exit 2
}

# ************************************************************************
# *      ShutdownXdriver
# ************************************************************************
ShutdownExistingDriver()
{
    $ECHO "Uninstalling a running driver. Please wait ..."

    cp /etc/inittab /tmp/inittab.org
    if [ "$1" = "aix" ]
    then
        sed -e 's/xm:234/:xm:234/g' /etc/inittab > /tmp/inittab.new
    else
        sed -e 's/xm:234/#xm:234/g' /etc/inittab > /tmp/inittab.new
    fi

    grep -v "3d:234" /tmp/inittab.new > /etc/inittab

    `$INIT_Q`
    /etc/3DxWare/daemon/3dxsrv -exit > /dev/null 2>&1
    sleep 1
    $ECHO "Done."
}


# ************************************************************************
# *      Install3DxWare
# ************************************************************************
Install3DxWare ()
{
    $ECHO "Installing files for 3DxWare for Unix / $1......"
    $ECHO ""

    ShutdownExistingDriver $1

    if [ "$1" = "aix" ]
    then
        cp $AIX_TAR_GZ $TMP
        cd $TMP
        gzip -d $TMP/$AIX_TAR_GZ
        tar -oxf $TMP/$AIX_TAR 
    fi

    if [ "$1" = "hpux" ]
    then
        if [ -r $HPUX_TGZ ]
        then
            cp $HPUX_TGZ $TMP/$HPUX_TAR_GZ
        elif [ -r $HPUX_TAR_GZ1 ]
        then
            cp $HPUX_TAR_GZ1 $TMP/$HPUX_TAR_GZ
        else
            cp $HPUX_TAR_GZ $TMP/$HPUX_TAR_GZ
        fi
        cd $TMP
        gzip -d $TMP/$HPUX_TAR_GZ
        tar -oxf $TMP/$HPUX_TAR
    fi

    if [ "$1" = "solaris" ]
    then
        if [ `$UNAME_R` = "5.10" ]
        then
            /usr/sbin/rem_drv ugen
            /usr/sbin/add_drv -i '"usb46d,c603" "usb46d,c621" "usb46d,c623" "usb46d,c625" "usb46d,c626" "usb46d,c627" "usb46d,c628" "usb46d,c629"' ugen
        else
            /usr/sbin/rem_drv usba10_ugen
            /usr/sbin/add_drv -i '"usb46d,c603" "usb46d,c621" "usb46d,c623" "usb46d,c625" "usb46d,c626" "usb46d,c627" "usb46d,c628" "usb46d,c629"' usba10_ugen
        fi
        cp $SOLARIS_TAR_GZ $TMP
        cd $TMP
        gzip -d $TMP/$SOLARIS_TAR_GZ
        tar -oxf $TMP/$SOLARIS_TAR
    fi

    if [ "$1" = "linux" ]
    then
        cp $LINUX_TAR_GZ $TMP
        cd $TMP
        tar -oxzf $TMP/$LINUX_TAR_GZ
    fi

    cp -R $TMP/etc/* /etc
    rm -rf $TMP/etc $TMP/InstallationInstructions_*_1-5-2.txt

    # convert old configs to new V5.3 config format
    $ECHO ""
    $ECHO ""
    $ECHO "Converting default configs V5.x to V5.3."
    $ECHO "(User configs will be converted when used)"
    $ECHO "Please wait a moment..."
    /etc/3DxWare/daemon/3dxsrv -convertConfigs

    # the end
    $ECHO ""
    $ECHO "Done."
}

# ************************************************************************
# *      DisplayUsage
# ************************************************************************
DisplayUsage ()
{
  $ECHO ""
  $ECHO ""
  $ECHO "****************************************************************"
  $ECHO ""
  $ECHO "    For testing purposes you can find the demos"
  $ECHO "                      xcube and xvalues at $TMP"
  $ECHO ""
  $ECHO "****************************************************************"
  $ECHO ""
  $ECHO ""
}


# ************************************************************************
# *      DisplayMenu
# ************************************************************************
DisplayMenu ()
{
  $ECHO ""
  $ECHO " Choose one of the following platforms:"
  $ECHO ""
  $ECHO "  1.  HP-UX"
  $ECHO "  2.  Solaris"
  $ECHO "  3.  AIX 5"
  $ECHO "  4.  Linux"
  $ECHO "  5.  Exit"
  $ECHO ""
  $ECHO "Please enter your choice (1-5)[$DEFAULT_CHOICE]: "
}

# ************************************************************************
# *      DisplayPortChoice1
# ************************************************************************
DisplayPortChoice1 ()
{
    $ECHO ""
    $ECHO "To which port is the device attached?"
}

# ************************************************************************
# *      DisplayPortChoice2
# ************************************************************************
DisplayPortChoice2 ()
{
    $ECHO " 3. Exit installation"
    $ECHO ""
     $ECHO "Please enter your choice (1 - 3): [1]"
    $ECHO ""
    read PORT
    $ECHO ""
    if [ -z "$PORT" ]
    then
        PORT=1
    fi
}

# ************************************************************************
# *      DisplayStartinittabInstallation
# ************************************************************************
DisplayStartInittabInstallation ()
{
    $ECHO "Installing start from /etc/inittab ..."
}

# ************************************************************************
# *      DisplayEndinittabInstallation
# ************************************************************************
DisplayEndInittabInstallation ()
{
    DEVICE=3
    PORT=3
    `$INIT_Q`
    $ECHO ""
    $ECHO ""
    $ECHO "Done."
    $ECHO ""
}

# ************************************************************************
# *      InstallSerialToInittab
# ************************************************************************
InstallSerialToInittab ()
{
    until [ "$PORT" = "3" ]
    do
        DisplayPortChoice1
        $ECHO " 1. $1"
        $ECHO " 2. $2"
        DisplayPortChoice2
        if [ "$PORT" = "1" ]
        then
            DisplayStartInittabInstallation
            if [ "$PLATFORM" = "4" ]
            then
            $ECHO "3d:2345:respawn:/etc/3DxWare/daemon/3dxsrv -d $1 </dev/null >/dev/null 2>&1" >> /etc/inittab
            else
            $ECHO "3d:234:respawn:/etc/3DxWare/daemon/3dxsrv -d $1 </dev/null >/dev/null 2>&1" >> /etc/inittab
            fi
            DisplayEndInittabInstallation
        else
            if [ "$PORT" = "2" ]
            then
                DisplayStartInittabInstallation
                if [ "$PLATFORM" = "4" ]
                then
                $ECHO "3d:2345:respawn:/etc/3DxWare/daemon/3dxsrv -d $2 </dev/null >/dev/null 2>&1" >> /etc/inittab
                else
                $ECHO "3d:234:respawn:/etc/3DxWare/daemon/3dxsrv -d $2 </dev/null >/dev/null 2>&1" >> /etc/inittab
                fi
                DisplayEndInittabInstallation
            else
                if [ "$PORT" = "3" ]
                then
                    DEVICE=3
                else
                    $ECHO ""
                    $ECHO "Invalid response."
                    PORT=0
                fi
            fi
        fi
    done
}

# ************************************************************************
# *      InstallToInittab
# ************************************************************************
InstallToInittab ()
{
    until [ "$DEVICE" = "3" ]
    do
        $ECHO ""
        $ECHO "Do you have a serial device or a USB device?"
        $ECHO ""
        $ECHO " 1. USB device"
        $ECHO " 2. serial device"
        $ECHO " 3. Exit installation"
        $ECHO ""
      $ECHO "Please enter your choice (1 - 3): [1]"
        $ECHO ""
        read DEVICE
        $ECHO ""
        if [ -z "$DEVICE" ]
        then
            DEVICE=1
        fi

        $ECHO ""
        if [ "$DEVICE" = "1" ]
        then
            DisplayStartInittabInstallation
            if [ "$PLATFORM" = "4" ]
            then
                $ECHO "3d:2345:respawn:/etc/3DxWare/daemon/3dxsrv -d usb </dev/null >/dev/null 2>&1" >> /etc/inittab
            else
                $ECHO "3d:234:respawn:/etc/3DxWare/daemon/3dxsrv -d usb </dev/null >/dev/null 2>&1" >> /etc/inittab
            fi
            DisplayEndInittabInstallation
        else
            if [ "$DEVICE" = "2" ]
            then
                case $PLATFORM in
                    1)
                        InstallSerialToInittab "/dev/tty0p0" "/dev/tty1p0"
                        ;;
                    2)
                        InstallSerialToInittab "/dev/term/a" "/dev/term/b"
                        ;;
                    3)
                        InstallSerialToInittab "/dev/tty0" "/dev/tty1"
                        ;;
                    4)
                        InstallSerialToInittab "/dev/ttyS0" "/dev/ttyS1"
                        ;;
                esac
            else
                if [ "$DEVICE" = "3" ]
                then
                    PORT=3
                else
                    $ECHO "Invalid response."
                    $ECHO ""
                    DEVICE=0
                fi
            fi
        fi
    done
}


#*************************************************************************
# Main Body
#*************************************************************************

# cd to script directory
cd `$ECHO $0 | sed -e 's/install-3dxunix.sh//g'`

# check to see if installing user is root
id | grep "uid=[0-9](" >/dev/null
if [ $? -ne 0 ] ; then
  CLEAR
    $ECHO "Please login as root and start the installation again!!"
    FatalError
fi

# check to see if the user is installing on this machine
CLEAR
DONE=0
while [ "$DONE" -eq 0 ] ; do
  $ECHO "This installs 3DxWareUnix V1.5.2 on this machine. Continue? (y/n) [y]"
  read ANSWER
    $ECHO ""
  case "$ANSWER" in
    y | Y | "")
      DONE=1
      ;;
    n | N)
      NormalError
      ;;
    q | Q)
      NormalError
      ;;
    *)
      $ECHO "Invalid Response."
      ;;
  esac
done

if [ `$UNAME` = "HP-UX" ]
then
  DEFAULT_CHOICE=1
fi

if [ `$UNAME` = "AIX" ]
then
  DEFAULT_CHOICE=3
fi
if [ `$UNAME` = "SunOS" ]
then
  DEFAULT_CHOICE=2
fi
if [ `$UNAME` = "Linux" ]
then
  DEFAULT_CHOICE=4
fi

until [ "$CHOICE" = "5" ]
do
  DisplayMenu
  read CHOICE
    $ECHO ""
  if [ -z "$CHOICE" ]
  then
    CHOICE=$DEFAULT_CHOICE
  fi

    PLATFORM=0
    $ECHO ""
    case $CHOICE in
        1)
            Install3DxWare "hpux"
            PLATFORM=1
            CHOICE=5
            ;;
        2)
            Install3DxWare "solaris"
            PLATFORM=2
            CHOICE=5
            ;;
        3)
            Install3DxWare "aix"
            PLATFORM=3
            CHOICE=5
            ;;
        4)
            Install3DxWare "linux"
            PLATFORM=4
            CHOICE=5
            ;;
        5)
      NormalError
            ;;
        *)
            $ECHO "Invalid Response."
            ;;
  esac
done

$ECHO ""
DONE=0
while [ "$DONE" -eq 0 ] ; do
    $ECHO "Do you want 3DxWareUnix being started with every login (from the /etc/inittab)? (y/n) [y]"
    read INITTABOPTION
    $ECHO ""
    case "$INITTABOPTION" in
        y | Y | "")
            InstallToInittab
            DONE=1
            ;;
        n | N )
            $ECHO "Please start the driver manually. [/etc/3DxWare/daemon/3dxsrv -d <port>]"
            $ECHO ""
            DONE=1
            ;;
        *)
            $ECHO "Invalid Response."
            ;;
    esac
done

DisplayUsage

exit 0

Could anyone give me a hint as to what to with this info. What should I put into the PKGBUILD?

Last edited by UFOKatarn (2011-04-21 22:03:19)

Offline

#4 2011-04-22 18:50:36

Lone_Wolf
Administrator
From: Netherlands, Europe
Registered: 2005-10-04
Posts: 15,392

Re: [REQUEST] 3DConnexion 3DXWare driver

These are the dependencies required :
xorg-fonts-100dpi
xorg-fonts-75dpi

- the install script is 1 of those interactive gui things that requires user input, those are very hard to automate for use in a pkgbuild.
you may be able to use an answerfile to give the script the necessary input if all answers are known before installang it.

- the install script changes inittab , which requires root rights and is tricky
if you disable this part, you still are stuck with the manual commands to start the devices.
The best way to solve this would be to provide a rc.d daemon script that takes care of starting / stopping the devices.

- there doesn't seem to be  a parameter to change the install location, and i think the tmp folder is cleared at boot

These are only  a few of the issues i see with making a package for this, it will definitely be a lot of work.

Last edited by Lone_Wolf (2011-04-22 18:53:21)


Disliking systemd intensely, but not satisfied with alternatives so focusing on taming systemd.

clean chroot building not flexible enough ?
Try clean chroot manager by graysky

Offline

#5 2011-04-23 21:09:00

UFOKatarn
Member
Registered: 2010-08-29
Posts: 30

Re: [REQUEST] 3DConnexion 3DXWare driver

Dear Lone Wolf smile!

Thank you for the information.

Since I understand only about 1/4 of the instructions that you provided, I can only hope that someone who is a bit more skilled and at the same time in need of this package decides to write the PKGBUILD.

Regards and happy holidays,
UFOKatarn

Offline

Board footer

Powered by FluxBB