├── wii-controller.service ├── versions ├── wii-lights-bt-internal-one.sh ├── wii-lights-bt-internal.sh ├── wii-lights-bt-external-one.sh └── wii-lights-bt-external.sh ├── restore_old_configs.sh ├── configs ├── dapinput.ini ├── InputAutoCfg.ini ├── Nintendo Wii Remote Pro Controller.cfg └── Nintendo Wii Remote Pro Controller2.cfg ├── listen_for_wiimote.py ├── README.md └── install.sh /wii-controller.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Wii Remote Light Fixer 3 | 4 | [Service] 5 | User=root 6 | Type=simple 7 | ExecStart=/home/pi/retropie_wiimote_lights/listen_for_wiimote.py 8 | 9 | [Install] 10 | WantedBy=multi-user.target 11 | -------------------------------------------------------------------------------- /versions/wii-lights-bt-internal-one.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sleep 2 4 | DEVICEDIR=/sys/bus/hid/devices 5 | 6 | for i in `find $DEVICEDIR/*/input/input*/ -maxdepth 1 -name "js?" -type d` 7 | do 8 | 9 | IFS='/' read -a myarray <<< "$i" 10 | id=${myarray[5]}; 11 | js=${myarray[8]:2}; 12 | 13 | for j in {0..3} 14 | do 15 | bright="$DEVICEDIR/$id/leds/$id:blue:p$j/brightness" 16 | if [ -e "$bright" ] 17 | then 18 | (( level = $j==$js ? 255 : 0 )) 19 | echo $level > $bright 20 | fi 21 | done 22 | 23 | done 24 | -------------------------------------------------------------------------------- /versions/wii-lights-bt-internal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sleep 2 4 | DEVICEDIR=/sys/bus/hid/devices 5 | 6 | for i in `find $DEVICEDIR/*/input/input*/ -maxdepth 1 -name "js?" -type d` 7 | do 8 | 9 | IFS='/' read -a myarray <<< "$i" 10 | id=${myarray[5]}; 11 | js=${myarray[8]:2}; 12 | 13 | for j in {0..3} 14 | do 15 | bright="$DEVICEDIR/$id/leds/$id:blue:p$j/brightness" 16 | if [ -e "$bright" ] 17 | then 18 | (( level = $j<=$js ? 255 : 0 )) 19 | echo $level > $bright 20 | fi 21 | done 22 | 23 | done 24 | -------------------------------------------------------------------------------- /versions/wii-lights-bt-external-one.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sleep 2 4 | DEVICEDIR=/sys/bus/hid/devices 5 | 6 | js=0 7 | for i in `find $DEVICEDIR/*/input/input*/ -maxdepth 1 -name "js?" -type d | tac` 8 | do 9 | 10 | IFS='/' read -a myarray <<< "$i" 11 | id=${myarray[5]}; 12 | 13 | for j in {0..3} 14 | do 15 | bright="$DEVICEDIR/$id/leds/$id:blue:p$j/brightness" 16 | if [ -e "$bright" ] 17 | then 18 | (( level = $j==$js ? 255 : 0 )) 19 | echo $level > $bright 20 | fi 21 | done 22 | js=$js+1 23 | 24 | done 25 | -------------------------------------------------------------------------------- /versions/wii-lights-bt-external.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sleep 2 4 | DEVICEDIR=/sys/bus/hid/devices 5 | 6 | js=0 7 | for i in `find $DEVICEDIR/*/input/input*/ -maxdepth 1 -name "js?" -type d | tac` 8 | do 9 | 10 | IFS='/' read -a myarray <<< "$i" 11 | id=${myarray[5]}; 12 | 13 | for j in {0..3} 14 | do 15 | bright="$DEVICEDIR/$id/leds/$id:blue:p$j/brightness" 16 | if [ -e "$bright" ] 17 | then 18 | (( level = $j<=$js ? 255 : 0 )) 19 | echo $level > $bright 20 | fi 21 | done 22 | js=$js+1 23 | 24 | done 25 | -------------------------------------------------------------------------------- /restore_old_configs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "This script will restore the controller backups made before installing" 3 | echo "the special configs that come with retropie_wiimote_lights." 4 | 5 | options=( "Yes, please restore my original config files." 6 | "No, don't do anything right now." ) 7 | 8 | select which in "${options[@]}"; do 9 | case $which in 10 | "${options[0]}") 11 | cp /opt/retropie/configs/all/retroarch/autoconfig/Nintendo\ Wii\ Remote\ Pro\ Controller.cfg.bak /opt/retropie/configs/all/retroarch/autoconfig/Nintendo\ Wii\ Remote\ Pro\ Controller.cfg 12 | cp /opt/retropie/configs/daphne/dapinput.ini.bak /opt/retropie/configs/daphne/dapinput.ini 13 | cp /opt/retropie/configs/n64/InputAutoCfg.ini.bak /opt/retropie/configs/n64/InputAutoCfg.ini 14 | cp /opt/retropie/configs/n64/mupen64plus.cfg.bak /opt/retropie/configs/n64/mupen64plus.cfg 15 | break;; 16 | "${options[1]}") 17 | echo "OK, I won't change anything." 18 | break;; 19 | esac 20 | done 21 | echo "Done." -------------------------------------------------------------------------------- /configs/dapinput.ini: -------------------------------------------------------------------------------- 1 | # Daphne cutom keyboard and joystick mapping 2 | # 3 | # Each input is mapped to 2 keyboard keys and one joystick button. 4 | # A joystick's first analog stick is also automatically mapped. 5 | # 6 | # The first two numbers are SDL keyboard codes (or 0 for "none") 7 | # Find keyboard codes here: 8 | # http://www.daphne-emu.com/mediawiki/index.php/KeyList 9 | # 10 | # The third number is the joystick button code (or 0 for "none") 11 | # Since 0 is reserved for special meaning, joystick button 0 is identified 12 | # as 1 here. Button 1 is identified as 2, and so on. 13 | # 14 | # Find the button you want to map by running: 15 | # jstest /dev/input/js0 16 | 17 | [KEYBOARD] 18 | KEY_UP = 273 114 14 19 | KEY_DOWN = 274 102 15 20 | KEY_LEFT = 276 100 16 21 | KEY_RIGHT = 275 103 17 22 | KEY_BUTTON1 = 306 97 2 23 | KEY_BUTTON2 = 308 115 1 24 | KEY_BUTTON3 = 32 113 4 25 | KEY_START1 = 49 0 10 26 | KEY_START2 = 50 0 0 27 | KEY_COIN1 = 53 0 9 28 | KEY_COIN2 = 54 0 0 29 | KEY_SKILL1 = 304 119 0 30 | KEY_SKILL2 = 122 105 0 31 | KEY_SKILL3 = 120 107 0 32 | KEY_SERVICE = 57 0 0 33 | KEY_TEST = 283 0 0 34 | KEY_RESET = 284 0 0 35 | KEY_SCREENSHOT = 293 0 0 36 | KEY_QUIT = 27 113 11 37 | END 38 | -------------------------------------------------------------------------------- /configs/InputAutoCfg.ini: -------------------------------------------------------------------------------- 1 | ; InputAutoCfg.ini for Mupen64Plus SDL Input plugin 2 | 3 | ; Keyboard_START 4 | [Keyboard] 5 | plugged = True 6 | plugin = 2 7 | mouse = False 8 | 9 | ;DPad R = key(100) 10 | ;DPad L = key(97) 11 | ;DPad D = key(120) 12 | ;DPad U = key(119) 13 | 14 | Start = key(115) 15 | Stop = key(99) 16 | ;Mempak switch = key(44) 17 | ;Rumblepak switch = key(46) 18 | 19 | A Button = key(304) 20 | B Button = key(120) 21 | Z Trig = key(122) 22 | L Trig = key(308) 23 | R Trig = key(32) 24 | 25 | ;C Button R = key(108) 26 | ;C Button L = key(106) 27 | ;C Button D = key(107) 28 | ;C Button U = key(105) 29 | 30 | X Axis = key(276,275) 31 | Y Axis = key(273,274) 32 | ; Keyboard_END 33 | 34 | ; Nintendo Wii Remote Pro Controller_START 35 | [Nintendo Wii Remote Pro Controller] 36 | plugged = True 37 | plugin = 2 38 | mouse = False 39 | 40 | AnalogDeadzone = 4096,4096 41 | AnalogPeak = 32768,32768 42 | 43 | DPad R = button(16) 44 | DPad L = button(15) 45 | DPad D = button(14) 46 | DPad U = button(13) 47 | 48 | Start = button(9) 49 | Stop = button(10) 50 | Mempak switch = button(11) 51 | Rumblepak switch = button(12) 52 | 53 | A Button = button(0) 54 | B Button = button(3) 55 | Z Trig = button(7) 56 | L Trig = button(4) 57 | R Trig = button(5) 58 | 59 | C Button U = axis(3-) 60 | C Button D = axis(3+) 61 | C Button L = axis(2-) 62 | C Button R = axis(2+) 63 | 64 | X Axis = axis(0-,0+) 65 | Y Axis = axis(1-,1+) 66 | ; Nintendo Wii Remote Pro Controller_END 67 | 68 | -------------------------------------------------------------------------------- /configs/Nintendo Wii Remote Pro Controller.cfg: -------------------------------------------------------------------------------- 1 | # For Bluetooth Wii U Pro / Wannabe Controllers 2 | input_device = "Nintendo Wii Remote Pro Controller" 3 | input_driver = "udev" 4 | 5 | # Select & Start 6 | input_select_btn = "8" 7 | input_start_btn = "9" 8 | 9 | # D-Pad 10 | input_up_btn = "13" 11 | input_down_btn = "14" 12 | input_right_btn = "16" 13 | input_left_btn = "15" 14 | 15 | # A/B/X/Y Buttons 16 | input_a_btn = "1" 17 | input_b_btn = "0" 18 | input_x_btn = "2" 19 | input_y_btn = "3" 20 | 21 | # Right Analog Button (click) and Stick 22 | input_r3_btn = "12" 23 | input_r_y_minus_axis = "-3" 24 | input_r_y_plus_axis = "+3" 25 | input_r_x_minus_axis = "-2" 26 | input_r_x_plus_axis = "+2" 27 | 28 | # Left Analog Button (click) and Stick 29 | input_l3_btn = "11" 30 | input_l_y_minus_axis = "-1" 31 | input_l_y_plus_axis = "+1" 32 | input_l_x_minus_axis = "-0" 33 | input_l_x_plus_axis = "+0" 34 | 35 | # Left & Right Shoulders & Triggers 36 | input_l_btn = "4" 37 | input_l2_btn = "6" 38 | input_r_btn = "5" 39 | input_r2_btn = "7" 40 | 41 | # Hotkey Setup - Select is Hotkey 42 | input_enable_hotkey_btn = "8" 43 | input_exit_emulator_btn = "9" 44 | input_load_state_btn = "4" 45 | input_save_state_btn = "5" 46 | input_state_slot_increase_btn = "16" 47 | input_state_slot_decrease_btn = "15" 48 | input_reset_btn = "0" 49 | input_menu_toggle_btn = "2" 50 | 51 | input_rewind_btn = "3" 52 | input_pause_toggle_btn = "1" 53 | input_hold_fast_forward_btn = "13" 54 | input_slowmotion_btn = "14" 55 | 56 | -------------------------------------------------------------------------------- /configs/Nintendo Wii Remote Pro Controller2.cfg: -------------------------------------------------------------------------------- 1 | # For Bluetooth Wii U Pro / Wannabe Controllers 2 | input_device = "Nintendo Wii Remote Pro Controller" 3 | input_driver = "udev" 4 | 5 | # Select & Start 6 | input_select_btn = "8" 7 | input_start_btn = "9" 8 | 9 | # D-Pad 10 | input_up_btn = "13" 11 | input_down_btn = "14" 12 | input_right_btn = "16" 13 | input_left_btn = "15" 14 | 15 | # A/B/X/Y Buttons 16 | input_a_btn = "1" 17 | input_b_btn = "0" 18 | input_x_btn = "2" 19 | input_y_btn = "3" 20 | 21 | # Right Analog Button (click) and Stick 22 | input_r3_btn = "12" 23 | input_r_y_minus_axis = "-3" 24 | input_r_y_plus_axis = "+3" 25 | input_r_x_minus_axis = "-2" 26 | input_r_x_plus_axis = "+2" 27 | 28 | # Left Analog Button (click) and Stick 29 | input_l3_btn = "11" 30 | input_l_y_minus_axis = "-1" 31 | input_l_y_plus_axis = "+1" 32 | input_l_x_minus_axis = "-0" 33 | input_l_x_plus_axis = "+0" 34 | 35 | # Left & Right Shoulders & Triggers 36 | input_l_btn = "4" 37 | input_l2_btn = "6" 38 | input_r_btn = "5" 39 | input_r2_btn = "7" 40 | 41 | # Hotkey Setup - Select is Hotkey 42 | #input_enable_hotkey_btn = "8" 43 | input_exit_emulator_btn = "10" 44 | #input_load_state_btn = "4" 45 | #input_save_state_btn = "5" 46 | #input_state_slot_increase_btn = "16" 47 | #input_state_slot_decrease_btn = "15" 48 | #input_reset_btn = "0" 49 | #input_menu_toggle_btn = "2" 50 | 51 | #input_rewind_btn = "3" 52 | #input_pause_toggle_btn = "1" 53 | #input_hold_fast_forward_btn = "13" 54 | #input_slowmotion_btn = "14" 55 | 56 | -------------------------------------------------------------------------------- /listen_for_wiimote.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import os 4 | import sys 5 | import signal 6 | import logging 7 | import logging.handlers 8 | import dbus 9 | import dbus.service 10 | import dbus.mainloop.glib 11 | import gobject 12 | 13 | LOG_LEVEL = logging.INFO 14 | #LOG_LEVEL = logging.DEBUG 15 | LOG_FILE = "/dev/log" 16 | LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s" 17 | BLUEZ_DEV = "org.bluez.Device1" 18 | 19 | def device_property_changed_cb(property_name, value, path, interface, device_path): 20 | global bus 21 | 22 | if property_name != BLUEZ_DEV: 23 | return 24 | 25 | device = dbus.Interface(bus.get_object("org.bluez", device_path), "org.freedesktop.DBus.Properties") 26 | properties = device.GetAll(BLUEZ_DEV) 27 | 28 | logger.info("Getting dbus interface for device: %s interface: %s property_name: %s" % (device_path, interface, property_name)) 29 | 30 | if properties["Connected"]: 31 | bt_addr = "_".join(device_path.split('/')[-1].split('_')[1:]) 32 | # Assumes that the wii-lights.sh script lives in the same directory as this script 33 | cmd = os.path.dirname(os.path.realpath(__file__)) + "/wii-lights.sh" 34 | logger.info("Running cmd: %s" % cmd) 35 | os.system(cmd) 36 | else: 37 | bt_addr = "_".join(device_path.split('/')[-1].split('_')[1:]) 38 | logger.info("Device: %s has disconnected" % bt_addr) 39 | 40 | def shutdown(signum, frame): 41 | mainloop.quit() 42 | 43 | if __name__ == "__main__": 44 | # shut down on a TERM signal 45 | signal.signal(signal.SIGTERM, shutdown) 46 | 47 | # start logging 48 | logger = logging.getLogger("bt_auto_loader") 49 | logger.setLevel(LOG_LEVEL) 50 | logger.addHandler(logging.handlers.SysLogHandler(address = "/dev/log")) 51 | logger.info("Starting to monitor Bluetooth connections") 52 | 53 | # Get the system bus 54 | try: 55 | dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 56 | bus = dbus.SystemBus() 57 | except Exception as ex: 58 | logger.error("Unable to get the system dbus: '{0}'. Exiting. Is dbus running?".format(ex.message)) 59 | sys.exit(1) 60 | 61 | # listen for signals on the Bluez bus 62 | bus.add_signal_receiver(device_property_changed_cb, bus_name="org.bluez", signal_name="PropertiesChanged", path_keyword="device_path", interface_keyword="interface") 63 | 64 | try: 65 | mainloop = gobject.MainLoop() 66 | mainloop.run() 67 | except KeyboardInterrupt: 68 | pass 69 | except: 70 | logger.error("Unable to run the gobject main loop") 71 | sys.exit(1) 72 | 73 | logger.info("Shutting down") 74 | sys.exit(0) 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Light up your Wii controllers with retropie_wiimote_lights 2 | ========================================================== 3 | This group of scripts simply enables your RetroPie box to light up the lights correctly 4 | when you are using either Wii Controllers or Wii U Pro Controllers (I have 3 of these and 5 | they rock !) 6 | 7 | ### Important 8 | 9 | This script expects to live in /home/pi/retropie_wiimote_lights. See below for moving it 10 | elsewhere 11 | 12 | ### Installation Instructions 13 | 14 | Login to your Retropie box as the 'pi' user and simply run: 15 | 16 | (cd && git clone http://github.com/pyhammond/retropie_wiimote_lights) 17 | 18 | Once your git clone is finished, simply run this command to install to retropie: 19 | 20 | (cd ~/retropie_wiimote_lights && ./install.sh) 21 | 22 | The install script will ask you to choose from 4 options. The definition of 23 | these options is as follows: 24 | 25 | 1. *Internal Bluetooth Controller - multiple lights on*
26 | Choose this if you are using the **Internal** Rasp Pi 3 Bluetooth Controller and you want:
27 | 2 lights to light up for the 2nd user,
28 | 3 lights to light up for the 3rd user, etc.
29 | 30 | 2. *External Bluetooth Controller - multiple lights on*
31 | Choose this if you are using an **External** Bluetooth Dongle and you want:
32 | 2 lights to light up for the 2nd user,
33 | 3 lights to light up for the 3rd user, etc.
34 | 35 | 3. *Internal Bluetooth Controller - single light*
36 | Choose this if you are using the **Internal** Rasp Pi 3 Bluetooth Controller and you want:
37 | the 2nd light (only the 2nd light alone) to light up for the 2nd user,
38 | the 3rd light (only the 3rd light alone) to light up for the 3rd user, etc.
39 | 40 | 4. *External Bluetooth Controller - single light*
41 | Choose this if you are using an **External** Bluetooth Dongle and you want:
42 | the 2nd light (only the 2nd light alone) to light up for the 2nd user,
43 | the 3rd light (only the 3rd light alone) to light up for the 3rd user, etc.
44 | 45 | After you've made your choice and the install script is done, you can reboot to see this all work in action. 46 | 47 | ### Retropie Version 48 | 49 | This is known to work well with RetroPie v4.2 and above. 50 | 51 | ### What controllers should these work with ? 52 | 53 | They should work well with either normal Wii Controllers or Wii U Pro Controllers. 54 | 55 | These are the Wii U Pro controllers I wrote them for: https://ebay.com/itm/112568890143 56 | 57 | Two things you could tweak if needed: 58 | ------------------------------------- 59 | 60 | 1. If you need to change the path of where these scripts live, you should only need 61 | to edit 1 file: wii-controller.service. Just change the line with ExecStart on it. 62 | 63 | 2. If you are annoyed by waiting 2 seconds before the lights light up correctly and 64 | you feel lucky, you can tweak the amount of time it waits for the bluetooth connection 65 | to complete before checking for the appropriate directories and lighting up the lights. 66 | 67 | This is the "sleep" command found at the very top (line 3) of wii-lights.sh. I had it on 68 | "sleep 1" for a while and it seemed to work, but occassionally wouldn't, so... -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | # Ask if they have an internal or external Bluetooth Dongle 6 | clear 7 | echo "WELCOME TO retropie_wiimote_lights - LET'S MAKE YOUR WIIMOTE LIGHTS WORK RIGHT!" 8 | echo "===============================================================================" 9 | echo "If you have an external bluetooth controller, many emulators will reverse" 10 | echo "the order of your controllers." 11 | echo 12 | echo "Also, you may choose whether to light up a single light on each controller" 13 | echo "corresponding with that input # or show 2 lights for 2nd controller, 3 for" 14 | echo "the 3rd, 4 for the 4th, etc. multiple lights is the typical choice." 15 | echo 16 | options=( "Internal Bluetooth Controller - multiple lights on" \ 17 | "External Bluetooth Controller - multiple lights on" \ 18 | "Internal Bluetooth Controller - single light" \ 19 | "External Bluetooth Controller - single light" ) 20 | 21 | select which in "${options[@]}"; do 22 | case $which in 23 | "${options[0]}") 24 | filname="wii-lights-bt-internal.sh" 25 | break;; 26 | "${options[1]}") 27 | filname="wii-lights-bt-external.sh" 28 | break;; 29 | "${options[2]}") 30 | filname="wii-lights-bt-internal-one.sh" 31 | break;; 32 | "${options[3]}") 33 | filname="wii-lights-bt-external-one.sh" 34 | break;; 35 | esac 36 | done 37 | 38 | # Now we know what which one to use, let's symlink that one: 39 | rm -f ./wii-lights.sh 40 | ln -s "versions/$filname" wii-lights.sh 41 | echo "Linking in script $filname" 42 | echo 43 | 44 | # Let's ask them if they want to install some default configs for some emulators 45 | options=( "Yes, install some default controller configs for the Wii-U Pro Controller." 46 | "No, my controller configs are just right. Please don't overwrite them." ) 47 | 48 | echo "You can choose to install some default controller configs for the Wii-U Pro" 49 | echo "controllers. This will backup then overwrite your controller config files" 50 | echo "for RetroArch, Daphne, and Mupen64." 51 | select which in "${options[@]}"; do 52 | case $which in 53 | "${options[0]}") 54 | # First backup some old configs that we are going to replace 55 | echo -n "Backing up your old configs for RetroArch, Daphne, and Mupen64..." 56 | cp /opt/retropie/configs/all/retroarch/autoconfig/Nintendo\ Wii\ Remote\ Pro\ Controller.cfg /opt/retropie/configs/all/retroarch/autoconfig/Nintendo\ Wii\ Remote\ Pro\ Controller.cfg.bak 2> /dev/null 57 | cp /opt/retropie/configs/daphne/dapinput.ini /opt/retropie/configs/daphne/dapinput.ini.bak 2> /dev/null 58 | cp /opt/retropie/configs/n64/InputAutoCfg.ini /opt/retropie/configs/n64/InputAutoCfg.ini.bak 2> /dev/null 59 | cp /opt/retropie/configs/n64/mupen64plus.cfg /opt/retropie/configs/n64/mupen64plus.cfg.bak 2> /dev/null 60 | echo " ...Done." 61 | 62 | # Configure the controllers for several emulators to use our custom configs 63 | echo -n "Copying default configs for RetroArch, Daphne, and Mupen64..." 64 | cp configs/Nintendo\ Wii\ Remote\ Pro\ Controller.cfg /opt/retropie/configs/all/retroarch/autoconfig/Nintendo\ Wii\ Remote\ Pro\ Controller.cfg 65 | cp configs/dapinput.ini /opt/retropie/configs/daphne/dapinput.ini 66 | cp configs/InputAutoCfg.ini /opt/retropie/configs/n64/InputAutoCfg.ini 67 | pushd /opt/retropie/configs/n64 && (sed 's/Joy Mapping Stop =.*/Joy Mapping Stop = "J0B8\/B9"/g;s/Joy Mapping Save State =.*/Joy Mapping Save State = "J0B8\/B5"/g;s/Joy Mapping Load State =.*/Joy Mapping Load State = "J0B8\/B4"/g' mupen64plus.cfg.rp-dist > mupen64plus.cfg); popd 68 | echo " ...Done." 69 | break;; 70 | "${options[1]}") 71 | echo "OK, skipping controller config files install." 72 | break;; 73 | esac 74 | done 75 | 76 | # Install the service to light up the wiimote lights correctly 77 | echo -n "Installing the Wiimote Lights Service..." 78 | sudo cp wii-controller.service /etc/systemd/system/ 79 | sudo systemctl enable wii-controller.service 80 | sudo systemctl start wii-controller.service 81 | echo " ...All Done." 82 | echo "Have Fun !" 83 | --------------------------------------------------------------------------------