Putting a Windows 10/11 computer to sleep over the network using SSH.


Recommended Posts

With the help of Chat GPT and my own troubleshooting of the code .. I now have an app for that written in python!

Works great! Woot!

image.png.899bd3f15c5ded04b3e44c451cb7f379.png

 

image.png.d69f18592f7ed179b93704684e457d83.png

 

here is the code if anyone else wants it. You just have to enter the SSH IP / username and password as well as the wake on lan IP and mac address .Just keep the " " around the info.

import tkinter as tk
import paramiko
import socket
import binascii
import threading

# Specify the computer name here
computer_name = "Computer Name"

def ssh_connect():
    def ssh_worker():
        host = "IP address"
        port = 22  # SSH port (e.g., 22)
        username = "Username"
        password = "Password"

        try:
            # Create an SSH client instance
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            # Connect to the SSH server
            ssh.connect(host, port, username, password)

            # Execute a custom command on the remote machine
            command = "RUNDLL32.EXE powrprof.dll,SetSuspendState"  # Replace with your desired command
            stdin, stdout, stderr = ssh.exec_command(command)
            
            # Show an SSH command execution success message on the GUI
            update_success_message("SSH command sent successfully")


            # Handle the result as needed
            result = stdout.read().decode()

            # Close the SSH connection when you're done
            ssh.close()

            print("SSH command result:")
            print(result)

        except paramiko.AuthenticationException:
            # Show an error message on the GUI
            update_error_message("Authentication failed")
        except paramiko.SSHException as e:
            # Show an error message on the GUI
            update_error_message(f"SSH connection failed: {e}")
        except Exception as e:
            # Show a generic error message on the GUI
            update_error_message(f"An error occurred: {e}")

    # Create and start a separate thread for SSH operations
    ssh_thread = threading.Thread(target=ssh_worker)
    ssh_thread.start()

def wake_on_lan():
    def wol_worker():
        mac_address = "MAC Address"  # Replace with your target MAC address
        broadcast_address = "IP Address"  # Replace with your network's broadcast address
        port = 9  # WoL port (default is 9)

        try:
            # Create a socket to send the WoL magic packet
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

            # Prepare the WoL magic packet
            mac_bytes = mac_address.replace(":", "").replace("-", "")
            if len(mac_bytes) != 12:
                # Show an error message on the GUI
                update_error_message("Invalid MAC address for WoL")
                return

            magic_packet = b'FF' * 6 + (mac_bytes * 16).encode()

            # Send the WoL magic packet
            s.sendto(binascii.unhexlify(magic_packet), (broadcast_address, port))
            s.close()

            # Show a WoL packet sent success message on the GUI
            update_success_message("WoL packet sent successfully")

        except socket.error as e:
            # Show an error message on the GUI
            update_error_message(f"Error sending WoL packet: {e}")

    # Create and start a separate thread for WoL operation
    wol_thread = threading.Thread(target=wol_worker)
    wol_thread.start()

# Create the main application window
app = tk.Tk()
app.title("SSHand Executor and WoL")

# Create a label with the specified computer name in big, bold letters
computer_name_label = tk.Label(app, text=computer_name, font=("Helvetica", 20, "bold"))
computer_name_label.pack()

# Create a label to display success messages
success_label = tk.Label(app, text="", font=("Helvetica", 14))
success_label.pack()

# Create a label to display error messages in red
error_label = tk.Label(app, text="", font=("Helvetica", 14), fg="red")
error_label.pack()

# Function to update the success message on the GUI
def update_success_message(message):
    success_label.config(text=message)
    app.after(5000, lambda: success_label.config(text=""))

# Function to update the error message on the GUI
def update_error_message(message):
    error_label.config(text=message)
    app.after(5000, lambda: error_label.config(text=""))

# Create buttons
execute_button = tk.Button(app, text="Put to Sleep", command=ssh_connect)
execute_button.pack()

sleep_button = tk.Button(app, text="Wakeup", command=wake_on_lan)
sleep_button.pack()

# Start the GUI application
app.mainloop()

Then used pyinstall to compile it to an exe

 

  • Like 2
  • Love 1
  On 23/09/2023 at 07:14, binaryzero said:

You should probably learn PoweShell…

Expand  

Dunno, i'm having a BLAST making these apps. It's addicting.

If anything i'd like to learn Python.

Should try and port it to other languages :).

ChatGPT is actually really powerful in assisting in programing though I'll give it that.

@WarwagonI would ignore @binaryzeroand his comment. You started with a .bat file, you branched out to make an application that uses Python. If it works for you, it works. I appreciate that you shared your experience so that others can use what you learned along the way if they want to do a similar thing.

  On 23/09/2023 at 19:56, Nick H. said:

@WarwagonI would ignore @binaryzeroand his comment. You started with a .bat file, you branched out to make an application that uses Python. If it works for you, it works. I appreciate that you shared your experience so that others can use what you learned along the way if they want to do a similar thing.

Expand  

There isn’t really anything wrong with his comment. PowerShell is ideal for this stuff and is built into Windows.  To each their own of course. 

  On 23/09/2023 at 20:13, adrynalyne said:

There isn’t really anything wrong with his comment. PowerShell is ideal for this stuff and is built into Windows. 

Expand  

I agree, nothing wrong with going through Powershell. But he brought it up back in February, we (binaryzero and myself) provided links to do it via Powershell. Warwagon went with Python, and it works.

Rehashing the same comment from several months ago just seems a bit useless, and not productive.

  On 23/09/2023 at 20:17, Nick H. said:

I agree, nothing wrong with going through Powershell. But he brought it up back in February, we (binaryzero and myself) provided links to do it via Powershell. Warwagon went with Python, and it works.

Rehashing the same comment from several months ago just seems a bit useless, and not productive.

Expand  

Gotcha. I didn’t check the date. 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Ea and Ubisoft's already have a 3rd party client mode where it removes the store features from the client and only uses 60mb of ram rather than 700.... I use playnite for gog and epic games because the the third party legendary client etc Combined in playnite epic and gog only use 200mb/ram while also showing my entire library from every other platform...
    • Also, this domain thing only works with Pro version of Windows, not the home version
    • More useless bloat to kill your pc by accident
    • Windows 11 gets more customization, a Recall home page, and more in new builds by Taras Buria Microsoft kicks off this Monday with a duo of nearly identical builds for Windows Insiders in the Dev and Beta Channels. Build 26200.5661 (Dev) and 26120.4452 (Beta) are now available for download with two big changes: a new home page for Recall and the recently spotted ability to customize where system indicators appear on the screen. The new Recall home page features more personalized content to help you get back to recent activities. It displays your latest snapshots and a curated view of the top three applications and websites you have spent the most time on in the past 24 hours. Here is what it looks like: In addition, Recall received a new nav bar on the left side of the screen with quick links to Home, Timeline, Feedback, and Settings. The next big addition is the ability to change where system indicators (brightness, volume, and more) appear on the screen. Now, you can set these at the top-left corner or top-center. To adjust this, go to Settings > System > Notifications > Position of the onscreen pop-up. Here are other changes included in today's builds: [Start menu] We are adding a Boolean to the Configure Start Pins policy to allow admins to apply Start menu pins once. This means that a user will receive admin pins on day 0 but can then make any changes to their Start pinned layout and have those safeguarded. These changes can be optionally applied through the existing configuration service provider (CSP). [File Explorer] We are restarting the roll out of AI actions in File Explorer that began rolling out with Build 26120.4151. Some Insiders may have seen the feature disappear. [Settings] In the most recently flights, we have added the country or region selected during device setup under Settings > Time & language > Language & region. Here is what was fixed: [General] Fixed the issue causing the Windows Vista boot sound to play instead of the Windows 11 boot sound. Fixed an issue where the option to reset your PC under Settings > System > Recovery wasn’t working on the previous build. Fixed an underlying issue leading to certain KVM virtual machines unexpectedly failing to boot, showing “UNSUPPORTED_PROCESSOR”. The Dev build has an extra fix: Fixed the issue causing a small number of Insiders to experience repeated bugchecks with KERNEL_SECURITY_CHECK_FAILURE after upgrading to most current Dev Channel builds. Known issues include the following: [General] [IMPORTANT NOTE] When joining the Beta Channel on Windows 11, version 24H2 – you will be offered Build 26120.4250 After installing Build 26120.4250, you will be offered the most recent update available. This 2-hop experience to get onto the latest flight in the Beta Channel is just temporary. After you do a PC reset under Settings > System > Recovery, your build version may incorrectly show as Build 26100 instead of Build 26120. This will not prevent you from getting future Beta Channel updates, which will resolve this issue. Some Windows Insiders may experience a rollback trying to install this update with a 0x80070005 in Windows Update. We’re working on a fix for Windows Insiders impacted. [Start menu] The following are known issues for Windows Insiders with the new Start menu: Using touch to navigate the new Start menu may not work reliably. For example, it currently does not support the swipe-up gesture. Drag and drop capabilities are limited from “All” to “Pinned.” In some cases, duplicate entries may appear in folders on the Start menu. [Xbox Controllers] Some Insiders are experiencing an issue where using their Xbox Controller via Bluetooth is causing their PC to bugcheck. Here is how to resolve the issue. Open Device Manager by searching for it via the search box on your taskbar. Once Device Manager is open, click on “View” and then “Devices by Driver”. Find the driver named “oemXXX.inf (XboxGameControllerDriver.inf)” where the “XXX” will be a specific number on your PC. Right-click on that driver and click “Uninstall”. [Click to Do (Preview)] The following known issues will be fixed in future updates to Windows Insiders: Windows Insiders on AMD or Intel™-powered Copilot+ PCs may experience long wait times on the first attempt to perform intelligent text actions in Click to Do after a new build or model update. [File Explorer] The following are known issues for AI actions in File Explorer: Narrator scan mode may not work properly in the action result canvas window for the Summarize AI action for Microsoft 365 files when reading bulleted lists. As a workaround, you can use Caps + Right key to navigate. [Widgets] Until we complete support for pinning in the new widgets board experience, pinning reverts you back to the previous experience You can find the announcement for the Dev build here and for the Beta build here.
  • Recent Achievements

    • One Month Later
      adnan.hebibovic earned a badge
      One Month Later
    • Week One Done
      adnan.hebibovic earned a badge
      Week One Done
    • Dedicated
      tesla maxwell earned a badge
      Dedicated
    • Dedicated
      Camlann earned a badge
      Dedicated
    • Week One Done
      fredss earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      629
    2. 2
      Michael Scrip
      224
    3. 3
      ATLien_0
      220
    4. 4
      +FloatingFatMan
      145
    5. 5
      Xenon
      134
  • Tell a friend

    Love Neowin? Tell a friend!