Klipper Shutdown (Linux version)
Contents:
Requirements
- HS110 wifi power plug
- python (should already be on your system, otherwise use sudo apt install python3)
- For simple setup using clear text passwords:
    - plink from putty-tools
- install with sudo apt install putty-tools
 
- For recommended setup using ssh with a key file:
    - ssh with a private key generated by ssh-keygen and its public key pasted to the device’s ~./ssh/authorized_keysfile
- see man sshandman ssh-keygenfor further help
 
- ssh with a private key generated by ssh-keygen and its public key pasted to the device’s 
- softScheck “tplink_smartplug.py” from https://github.com/softScheck/tplink-smartplug/tree/master
Setup
Copy the 5 files hs110_off, hs110_on, mks_poweroff , shutdown_sv06 (from below) and tplink_smartplug.py (from above link) into a single directory.
Make these files executable by using chmod +x *.
Have putty-tools installed (as stated above), unless you have generated ssh keys for passwordless login.
Modify hs110_off and hs110_on, so the IP-address points to your HS110 wifi power plug.
Without further modifications, these files should now work for the Sovol KlipperScreen.
For other devices, change the variables PRINTER, USERNAME and PASSWORD in mks_poweroff according to your settings.
Now you should be able to shutdown and power off the device using clear text passwords by executing shutdown_sv06.
To power it on, execute hs110_on.
To use passwordless login (recommended), you need to generate a key file.
You can either use putty’s plink or standard ssh for that, but the keys need to be generated differently.
First create the “.ssh” directory (if not already existing)
- mkdir -p ~/.ssh ; chmod 700 ~/.ssh
For plink:
- Use puttygento generate the key
 Example:puttygen -t ed25519 -f ~/.ssh/printerkey
- Use puttygenagain to generate and display the accompanying standard ssh public key
 Example:puttygen ~/.ssh/printerkey -L
- See man puttgenfor further details
For standard ssh:
- Use ssh-keygento generate the key
 Example:ssh-keygen -t ed25519 -f ~/.ssh/printerkey
- Use cat ~/.ssh/printerkey.pubto display the ssh public key
- See man ssh-keygenfor further details.
- Set the PLINKCMDvariable inmks_powerofftossh
Then
- Make the keyfile unreadable to other users: chmod 600 ~/.ssh/printerkey
- Adjust the PLINKKEYvariable inmks_poweroffso it points to your private key file (~/.ssh/printerkeyin these examples)
- Empty the PASSWORDvariable inmks_poweroff
- Log into the device using ssh and add the public key to ~/.ssh/authorized_keys:- nano ~/.ssh/authorized_keys
- Paste the public key line and press “CTRL+X” to quit, press “Y” to confirm once and press “ENTER” to confirm again and quit.
 
- Allow user “mks” to shutdown/reboot/halt (without “sudo” asking for a password):
    - add following line to /etc/sudoers.conf (run sudo visudo):
 mks ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff
 (Change “mks” to the real username, if you use a different device than Sovol’s KlipperScreen.)
 
- add following line to /etc/sudoers.conf (run 
Now you should be able to shutdown and power off the device without clear text passwords.
Files
hs110_off
#!/bin/sh
python tplink_smartplug.py -t 192.168.1.60 -c off
hs110_on
#!/bin/sh
python tplink_smartplug.py -t 192.168.1.60 -c on
mks_poweroff
#!/bin/bash
# Install plink (allows passwords given on commandline)
#   apt install putty-tools
# To use a ssh key:
#   Adjust PLINKKEY so it points to your private key
#   (generated with "puttygen" when using putty, or with "ssh-keygen" for default ssh)
# Using ssh instead of plink is possible when using a ssh key instead of a clear text password:
#   Set PLINKCMD=ssh
# #### best practice is using a PLINKKEY instead of a cleartext PASSWORD
PRINTER=mkspi
USERNAME=mks
PASSWORD=makerbase
PLINKCMD=plink
PLINKKEY=
# options for plink with putty key (created with puttygen)
#PASSWORD=
#PLINKKEY=~/.ssh/printerkey
# options for standard ssh (key created with ssh-keygen)
#PASSWORD=
#PLINKKEY=~/.ssh/printerkey
#PLINKCMD=ssh
# #### nothing should be changed below here
# MKSPI: allow user "mks" to shutdown/reboot/halt (without "sudo" asking for a password):
#        add following to /etc/sudoers.conf (run "visudo"):
#        mks ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff
POWERCMD="sudo poweroff"
if [ "$PLINKCMD" ##### "plink" ]; then
  OPTBATCH=-batch
fi
if [ ! -z $PLINKKEY ]; then
  OPTKEY="-i $PLINKKEY"
fi
if [ ! -z $PASSWORD ]; then
  OPTPW="-pw $PASSWORD"
  POWERCMD="echo $PASSWORD|sudo -S poweroff"
fi
$PLINKCMD $OPTPW $OPTKEY $OPTBATCH $USERNAME@$PRINTER $POWERCMD
shutdown_sv06
#!/bin/bash
PRINTER=mkspi
# try to ping MKSPI, shut it down, if it responds
if ping -c 1 -W 1 $PRINTER >/dev/null; then
  echo Shutting down MKSPI
  bash mks_poweroff
  echo -n Waiting for MKS to shutdown.
  # ping MKSPI, until it stops responding
  while ping -c 1 -W 1 $PRINTER >/dev/null; do
    echo -n .
    sleep 1
  done
  # not responding any longer
  echo MKSPI has shut down.
  echo Waiting additional 7 seconds...
  sleep 7
fi
echo Power off HS110 smartplug...
bash hs110_off