Changing the RDP Port on Windows 10

By default, remote desktop connections on windows use port 3389. If you find the need to change this port, the following should help. Make sure you have “Allow remote connections to this computer” checked under “System Properties > Remote” before you begin.

In my experience, you should avoid changing the mapped port for core Windows services if possible, as this can cause numerous configuration and management issues. Other options include:
– Using port mapping (forwarding) on your router (e.g. externalip:10000 -> serverip:3389), however not all routers offer this functionality.
– Using a third party remote desktop app, like Chrome Remote Desktop or LogMeIn, however these require specific software and/or subscriptions
– Using a server/PC as a RDP “gateway”. You then access all further RDP hosts from this first point of contact.
– Using a RD gateway/RD Web access. This requires a server with the appropriate role installed, but can optionally be configured with two-factor authorisation like Duo.

To check what port your RDP is currently listening on, use the netstat command in an elevated command prompt.

netstat -abo

This will show information about current network connections and listening ports, as well as associated executables and processes. You’ll see port 3389 bound to “svchost.exe” on “TermService”.

RDP on port 3389


To change the bound port you’ll need to open an elevated command prompt and run regedit.


Navigate to the PortNumber setting.

HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > Terminal Server > WinStations > RDP-Tcp

Right click on the “REG_DWORD” named “PortNumber” and hit “Modify”. Change the base to Decimal and enter the new port (between 1025 and 65535). You can use NetStat to check if a particular port is already bound to a process.

Once you’ve changed the value, exit RegEdit and either reboot the computer, or simply restart the Remote Desktop Services service using the “Services” snap-in in “Computer Management”. You can confirm the port has been changed by running netstat again (in my case, to 10000).

RDP on port 10000

Finally, open up Windows Firewall and add a new inbound rule for the new port. You won’t be able to change the existing rule as that’s a core system rule, but copy across the values into a new rule and you’ll be good to go.

SEATT Feature Wishlist

Updated 06/02/2016 to add further functionality.

Since I’ve updated SEATT there’s been requests for functionality. The ones I’ve captured are below, in a rough priority order:

  1. Repeatable/recurring events – Some sort of functionality to allow repeatable events – whether this be decoupling of event details from dates, or some other mechanism.
  2. Event calendar shortcode and layout – Allow you to group events into categories and display all relevant events in a list view on a post.
  3. Custom page layout to help display events for #2.
  4. Allow admin to use tinymce content editor.
  5. Register for events without requiring an account – I’m currently planning to do this via email confirmation and with a captcha, but need to test it.
  6. Email notification – More broad email notification, both upon registration (to user and admin), and also allowing admin to email users.
  7. Custom list pages and fields – Allow admins to change what information the plugin lists, and where it draws usernames and names from.
  8. Allow other users to see comments on short-code form.
  9. Additional columns in database to capture event details.
  10. Internationalisation, and custom locale options – This includes the option to allow the user to call an “Event” a “Ride” or similar.
  11. Custom redirect to put user back at entry page after login.

Thanks again to all of you for getting in touch, and to those of you who have provided snippets based on your modifications to the plugin. I’m hoping to get through at least a couple of these in the coming months.

SEATT updated to 1.3.0

I’ve updated Simple Event Attendance (SEATT WordPress plugin) to version 1.3.0. This brings bug fixes, and updates in line with the release of WordPress 4.3.1.

Firstly, an apology for taking so long to release another version – feel welcome to get in touch if you want to discuss changes you’ve made to your code in the interim. These are largely security changes, so it’s recommended that you update when you can. The database structure hasn’t changed, so you should experience no loss of data.


  • Ensured the database elements all use the correct version of wpdb->prepare where needed, and tidied up any inconsistent usage where statements weren’t prepared. Thanks to J.D. Grimes for chasing me on this.
  • Made some text and layout changes throughout to work better with the WordPress default templates.

In the pipeline are a few more changes that should further improve functionality of the plugin:

  • Some sort of functionality to allow repeatable events – whether this be decoupling of event details from dates, or some other mechanism.
  • Selectable categories for lists, allowing you to put one shortcode into a post/page and get a list of all active events.
  • Anonymous registration – something that quite a few have asked for. It will be turned off by default but it is coming with captcha user verification.
  • Email notification – I haven’t explored this yet, but am hoping it can be done using internal wordpress functions.

Live at

As always, any feedback is very welcome.

Google Maps Distance (DistanceMatrix) API for UK in JSON

The postcode code has been updated to use Google’s distancematrix api, which provides a very different set of data from the old “as the bird flies” calculation (it calculates road distance, and provides transport options etc).

The following code is merely a demonstration, which can be seen here.

// Specify Postcodes to Geocode
$postcode1 = 'BH151DA';
$postcode2 = 'BH213AP';

// Set and retrieve the query URL
$request = "" . $postcode1 . "&destinations=" . $postcode2 . "&mode=driving&language=en-GB&sensor=false&units=imperial";
$distdata = file_get_contents($request);

// Put the data into an array for easy access
$distances = json_decode($distdata, true);

// Do some error checking, first for if the response is ok
$status = $distances["status"];
$row_status = $distances["rows"][0]["elements"][0]["status"];

if ($status == "OK" && $row_status == "OK") {

// Calculate the distance in miles
$distance = $distances["rows"][0]["elements"][0]["distance"]["value"];
$distance_miles = round($distance * 0.621371192/1000, 2);

echo 'The distance between '.$postcode1.' and '.$postcode2.' is '.($distance/1000).'Km ('.$distance_miles.' miles).';

} else {
    echo "Calculating the distance between your locations caused an error.";


Having better error checking would also be a good idea if you plan to use the above code. Using &unit=imperial is optional, as Google always returns metres – so the code runs a basic calculation on these to convert to miles.

Raspberry Pi Shutdown Switch – Safely Turning off the Pi

We use a model B rev 2.0 Raspberry Pi as one of our Samba and DLNA media servers, and normally turn it off through a Webmin control panel to ensure nothing untoward happens with any of the attached hard drives. This solution is less than ideal however, as it requires a second powered-on device and a couple of clicks to get to the shutdown page in the control panel.

The Raspberry Pi forum has am excellent thread about a simple & safe shutdown button, from which I copied to produce my shutdown switch. It’s something you can put together in less than 20 minutes if you have the parts.

All you need is to install the RPi.GPIO Python class on the Pi (use SSH to grab it, “wget”; unzip it; and install it, “sudo python install”; then remove the files to tidy it all up), and you can start accessing the pins via Python scripts.

Just connect pin 1 to a momentary open switch, and the switch to a 1K and a 10K resistor. Then connect the 10K resistor to the ground on pin 9 and the 1K to pin 11 (GPIO17). If you’re wondering where these are then this page has some nice illustrations; and more info on these pins can be found here. It’s worth covering the 5V line with some insulation just to minimise the risk of shorting out your Pi with it (see images below), as everything else on the GPIO header is 3.3V.

Breadboard setup, minus switch which would cross lanes 12 & 13.
Breadboard setup, minus switch which would cross lanes 12 & 13.
Raspberry Pi Shutdown Switch
In the case, soldered directly onto the pins with a momentary switch screwed into the case above the pi logo (hence minimising risk of contact)

All that’s left is to monitor pin 11 (GPIO17) for activity, for which I used the code on the Raspberry Pi forum.

Placed in /home/pi/bin/button/

import RPi.GPIO as GPIO
import time
import os
GPIO.setup(17, GPIO.IN)
while True:
os.system("sudo shutdown -h now")

Placed in /etc/rc.local on the line before “exit 0”

python /home/pi/bin/button/

Then the Pi will shutdown when the button is pressed for about 1 second – only the Power light will remain on (red) when it’s shut down. It’s worth noting that this won’t work if the Pi has crashed but that’s not an issue we often see.

Updated 22/01/15 – Thanks to “Joost” for clarification on pins, specifically that GPIO17 is pin 11 on the board.