#! /bin/bash ### BEGIN INIT INFO # Provides: bluetooth # Required-Start: $local_fs $syslog $remote_fs # Required-Stop: $local_fs $syslog $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start bluetooth daemons ### END INIT INFO # # bluez-utils Bluetooth subsystem starting and stopping # # originally from bluez's scripts/bluetooth.init # # Edd Dumbill # LSB 3.0 compilance and enhancements by Filippo Giunchedi # # startup control over dund and pand can be changed by editing # /etc/default/bluez-utils PATH=/sbin:/bin:/usr/sbin:/usr/bin DESC="Bluetooth services" HCID=/usr/sbin/hcid HCIATTACH=/usr/sbin/hciattach HCID_NAME=hcid HCID_OPTIONS="-x -s" HID2HCI=/usr/sbin/hid2hci UART_CONF=/etc/bluetooth/uart RFCOMM=/usr/bin/rfcomm RFCOMM_NAME=rfcomm RFCOMM_CONF=/etc/bluetooth/rfcomm.conf SDPTOOL=/usr/bin/sdptool DUND_DAEMON=/usr/bin/dund DUND_NAME=dund PAND_DAEMON=/usr/bin/pand PAND_NAME=pand HIDD_DAEMON=/usr/bin/hidd HIDD_NAME=hidd DUND_ENABLED=0 PAND_ENABLED=0 HIDD_ENABLED=0 DUND_OPTIONS="" PAND_OPTIONS="" HIDD_OPTIONS="--master --server" test -f /etc/default/bluetooth && . /etc/default/bluetooth test -f /etc/default/rcS && . /etc/default/rcS . /lib/lsb/init-functions # test for essential daemons test -x $HCID || exit 0 test -x $HCIATTACH || exit 0 test -x $RFCOMM || exit 0 # disable nonessential daemons if not present if test "$DUND_ENABLED" != "0"; then if ! test -f $DUND_DAEMON; then DUND_ENABLED=0 fi fi if test "$PAND_ENABLED" != "0"; then if ! test -f $PAND_DAEMON; then PAND_ENABLED=0 fi fi if test "$HIDD_ENABLED" != "0"; then if ! test -f $HIDD_DAEMON; then HIDD_ENABLED=0 fi fi set -e run_sdptool() { test -x $SDPTOOL || return 1 if ! test -z "$SDPTOOL_OPTIONS" ; then oldifs="$IFS" IFS=";" for o in $SDPTOOL_OPTIONS ; do #echo "execing $SDPTOOL $o" IFS=" " $SDPTOOL $o &>/dev/null done IFS="$oldifs" fi } enable_hci_input() { if [ "$VERBOSE" != no ]; then log_success_msg "Switching on Bluetooth input devices..." $HID2HCI --tohci else $HID2HCI --tohci >/dev/null 2>&1 fi } disable_hci_input() { if [ "$VERBOSE" != no ]; then log_success_msg "Switching Bluetooth input devices back to HID mode..." $HID2HCI --tohid else $HID2HCI --tohid >/dev/null 2>&1 fi } start_pan() { if test "$DUND_ENABLED" != "0"; then start-stop-daemon --start --quiet --exec $DUND_DAEMON -- $DUND_OPTIONS [ "$VERBOSE" != no ] && log_success_msg "Starting $DUND_NAME..." fi if test "$PAND_ENABLED" != "0"; then start-stop-daemon --start --quiet --exec $PAND_DAEMON -- $PAND_OPTIONS [ "$VERBOSE" != no ] && log_success_msg "Starting $PAND_NAME..." fi } stop_pan() { if test "$DUND_ENABLED" != "0"; then start-stop-daemon --stop --quiet --exec $DUND_DAEMON || true [ "$VERBOSE" != no ] && log_success_msg "Stopping $DUND_NAME..." fi if test "$PAND_ENABLED" != "0"; then start-stop-daemon --stop --quiet --exec $PAND_DAEMON || true [ "$VERBOSE" != no ] && log_success_msg "Stopping $PAND_NAME..." fi } start_hid() { if test "$HIDD_ENABLED" != "0"; then start-stop-daemon --start --quiet --exec $HIDD_DAEMON -- $HIDD_OPTIONS [ "$VERBOSE" != no ] && log_success_msg "Starting $HIDD_NAME..." fi } stop_hid() { if test "$HIDD_ENABLED" != "0"; then $HIDD_DAEMON --killall start-stop-daemon --stop --quiet --exec $HIDD_DAEMON || true [ "$VERBOSE" != no ] && log_success_msg "Stopping $HIDD_NAME..." fi } start_uarts() { [ -f $HCIATTACH ] && [ -f $UART_CONF ] || return grep -v '^#' $UART_CONF | while read i; do if [ "$VERBOSE" != no ]; then $HCIATTACH $i else $HCIATTACH $i >/dev/null 2>&1 fi done } stop_uarts() { killall hciattach > /dev/null 2>&1 || true } start_rfcomm() { if [ -x $RFCOMM ] && [ -f $RFCOMM_CONF ] ; then # rfcomm must always succeed for now: users # may not yet have an rfcomm-enabled kernel if [ "$VERBOSE" != no ]; then log_success_msg "Starting $RFCOMM_NAME..." $RFCOMM -f $RFCOMM_CONF bind all || true else $RFCOMM -f $RFCOMM_CONF bind all >/dev/null 2>&1 || true fi fi } stop_rfcomm() { if [ -x $RFCOMM ] ; then if [ "$VERBOSE" != no ]; then log_success_msg "Stopping $RFCOMM_NAME..." $RFCOMM unbind all || true else $RFCOMM unbind all >/dev/null 2>&1 || true fi fi } restart_rfcomm() { if [ -x $RFCOMM ] && [ -f $RFCOMM_CONF ] ; then if [ "$VERBOSE" != no ]; then log_success_msg "Restarting $RFCOMM_NAME..." $RFCOMM unbind all || true $RFCOMM -f $RFCOMM_CONF bind all || true else $RFCOMM unbind all >/dev/null 2>&1|| true $RFCOMM -f $RFCOMM_CONF bind all >/dev/null 2>&1 || true fi fi } case "$1" in start) log_daemon_msg "Starting $DESC" if test "$BLUETOOTH_ENABLED" == "0"; then log_progress_msg "disabled. see /etc/default/bluetooth" log_end_msg 0 exit 0 fi start-stop-daemon --start --quiet --exec $HCID -- $HCID_OPTIONS || true log_progress_msg "hcid" start_uarts || true start_hid || true enable_hci_input || true start_rfcomm || true start_pan || true log_end_msg 0 ;; stop) log_daemon_msg "Stopping $DESC" stop_pan || true stop_rfcomm || true disable_hci_input || true stop_hid || true start-stop-daemon --stop --quiet --exec $HCID || true log_progress_msg "$HCID_NAME" stop_uarts || true log_end_msg 0 ;; restart|force-reload) log_daemon_msg "Restarting $DESC" stop_hid || true stop_pan || true start-stop-daemon --stop --quiet --exec $HCID || true sleep 1 if test "$BLUETOOTH_ENABLED" == "0"; then log_progress_msg "disabled. see /etc/default/bluetooth" log_end_msg 0 exit 0 fi start-stop-daemon --start --quiet --exec $HCID -- $HCID_OPTIONS || true log_progress_msg "$HCID_NAME" start_pan || true start_hid || true restart_rfcomm log_end_msg 0 ;; *) N=/etc/init.d/bluetooth # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 # vim:noet