Surface 2 Pro Install Linux Ubuntu 24.04 LTS

Windows 10 support ended. Microsoft Surface 2 Pro devices can't officially be updated to Windows 11. This guide shows how to switch to Linux Ubuntu 24.04 LTS instead:

Installation steps 

  1. Download Rufus https://github.com/pbatard/rufus
  2. Download Linux, e.g. Ubuntu 24 https://ubuntu.com/download/desktop
  3. Format USB stick with Rufus
    - Select the USB stick (all files on it will be erased)
    - Select image file
    - Select MBR
    - Select BIOS or UEFI
    - Select Fix for older BIOSe
    - Select FAT32
    - Press Start
    Rufus Linux Ubuntu 24 USB bootable stick

  4. Shutdown Surface 2 device
  5. Hold Volume-Up & hold Home-Button until Surface logo appears
  6. Disable Secure Boot --> Red background around Surface logo on boot
  7. Shutdown Surface 2 device
  8. Insert USB Stick into Surface 2
  9. Hold Volume-Down & press Home-Button until Surface logo appears 
  10. Select Install Ubuntu in GRUB loader 
  11. Optional: For additional security (using encryption@rest) use lvm with encryption and use a long unique passphrase. 

Result 


Other Microsoft Surface devices might use: https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup
 

Powershell Website "Ping" using the winsystems web proxy

If you want to monitor/check (every 10s) continuesly if a website (in this exampe http://www.google.de) is reachable using powershell and also using the configured webproxy in your windows system, then you can use the following example:


while ($true) {
    $webClient = New-Object System.Net.WebClient
    $proxy = [System.Net.WebRequest]::GetSystemWebProxy()
    $proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
    $webClient.Proxy = $proxy

    $proxyUri = $proxy.GetProxy([System.Uri]::new("http://www.google.de"))
    $proxyIp = $proxyUri.Host
    $proxyPort = $proxyUri.Port

    $startTime = Get-Date
    try {
        $response = $webClient.DownloadString("http://www.google.de")
        $endTime = Get-Date
        $latency = ($endTime - $startTime).TotalMilliseconds
        $statusCode = 200 # WebClient doesn't expose status code directly, assuming success here
        Write-Output "[$startTime] Latency: ${latency}ms, HTTP Status Code: $statusCode, Proxy:         $proxyIp :$proxyPort"
    } catch {
        $endTime = Get-Date
        $latency = ($endTime - $startTime).TotalMilliseconds
        $errorMessage = $_.Exception.Message
        Write-Output "[$startTime] Latency: ${latency}ms, Error: $errorMessage, Proxy: $proxyIp :$proxyPort"
    }

Start-Sleep -Seconds 10
}


powershell "ping" of website using proxy


Disabled Transparent Huge Pages with created systemd service

In some applications (e.g. Splunk) you need to disable Transparent Huge Pages THP .  When your systems are running in a managed environment ...