Microsoft Surface Pro X – SSD austauschen und erweitern

Microsofts ARM-Prozessor basiertes Surface Pro X* ist das erste Surface Tablet, dass es erlaubt, relativ einfach den verbauten SSD-Speicher zu erweitern (und damit die normalerweise fällig werdenden horrenden Aufschläge für größere SSDs zu umgehen; außerdem bietet Microsoft selbst nur maximal 512GB an, während auf dem freien Markt mittlerweile eine passende 1TB große SSD zu finden ist) oder bei Defekt zu ersetzen. Denn hinter einer magnetischen Klappe auf der Rückseite, die sich einfach mit einem SIM-Tray-Öffner oder einer Stecknadel öffnen lässt, verbirgt sich nicht nur der Einschub für die SIM-Karte des LTE-fähigen Surface Pro X*, sondern auch die verbaute SSD. Die sieht zwar etwas ungewohnt aus, weil Microsoft der SSD ein Metall-Casing – vermutlich zur besseren Verteilung der Wärmeentwicklung – verpasst hat. Ansonsten handelt es sich aber um eine Standard m.2-Schnittstelle die NVMe unterstützt.

Nur auf die richtige Größe bzw. Länger der m.2-SSD muss geachtet werden: es handelt sich nicht um eine Standard m.2 2280 (80 = 80mm Länge), sondern um eine m.2. 2230 (30 = 30mm Länge). Da gibt nicht sonderlich viel Auswahl, von Western Digital gibt es die PC SN520 mit 128, 256 oder 512GB (1.700 MB/s lesen, 1.400 MB/s schreiben). Ich habe die 512GB-Variante (Kostenpunkt etwa 89 Euro) verbaut.

UPDATE 2: In der Zwischenzeit läuft mein zweites Surface Pro X mit einer anderen alternativen NVMe m.2-SSD. Die kommt von KIOXIA (ehemals Toshiba Memory). Die Modellebzeichnung lautet BG4. Die von mir genutzte SSD kommt mit 1TB Speicher (2.300 MB/s lesen, 1.800 MB/s schreiben; hier gibt es reale Testwerte) (Kostenpunkt 189 Euro). Es gibt auch 128GB, 256GB oder 512GB-Varianten.

Einige kleinere Hürden gibt es dann beim Wechsel der SSD des Surface Pro X* aber doch:

Nötiges Equipment:

  1. SIM-Tray-Tool* oder Stecknadel zum Öffnen der magnetischen Klappe auf der Rückseite
  2. Torx T3 Schraubendreher*, um die Schraube zu lösen, die die SSD an Ort und Stelle hält
  3. Austausch-SSD im Format m.2 2230 (NVMe oder langsameres SATA)
  4. USB-Stick* mit mindestens 16 GB (alternativ: Mirco-SD-Karte* und Adapter*, die verlinkte Kombination ist die, die bei mir funktioniert hat)
  5. USB-A auf USB-C Adapter*

Weiteres Vorgehen:

  1. USB-Stick mittels USB-A auf USB-C Adapter mit dem Surface Pro X* verbinden.
  2. Unter Windows 10 nach „Wiederherstellungslaufwerk erstellen“ suchen, Häkchen bei „Sichern der Systemdateien auf dem Wiederherstellungslaufwerk“ setzen und das Wiederherstellungslaufwerk auf dem USB Stick erstellen. Dann: sehr lange warten, bis die Laufwerkserstellung abgeschlossen ist. UPDATE 1: ACHTUNG: bei mir kam es zwei Mal vor, dass das Wiederherstellungslaufwerk scheinbar korrekt erstellt wurde, dann aber von dem Stick nicht gebootet werden konnte (erst mit einem anderen Stick/MicroSD-Karte hat es dann funktioniert. Ein korrekt erstellter Stick muss beim Wiederanstecken direkt im Explorer eingebunden werden, so dass man die EFI-Dateien sehen kann).
  3. Surface Pro X herunterfahren.
  4. Verbaute SSD durch die neue SSD ersetzen (eine bebilderte Anleitung liefert ifixit.com).
  5. USB-Stick mittels USB-A auf USB-C Adapter mit dem Surface Pro X verbinden.
  6. Surface mit gleichzeitig gedrückt gehaltener „Lautstärke Lauter“-Seitentaste und Power-Taste starten (gedrückt halten, bis Windowslogo auf dem Bildschirm erscheint).
  7. Im dann gestarteten UEFI/BIOS entweder die Reihenfolge der Boot-Devices ändern oder mittels eines Left-Swipe über „USB-Device“ direkt vom Wiederherstellungsstick booten.
  8. Im dann geladenen Menü die Windows-Wiederherstellung über externes Medium (von einem Laufwerk wiederherstellen) starten.
  9. Warten bis die Wiederherstellung und Neustarts abgeschlossen sind. Fertig.
--
Beitrag interessant? Ich freue mich über einen Kauf bei Amazon*.

Microsoft Surface Pro X – Externes Display

Erstmal das Gute vorweg: ein 4k Display mit 3840 x 2160 Pixeln lässt sich am Surface Pro X* problemlos mit 60Hz betreiben (getestet mit LG 27UD88*). Bei meinem Samsung C34J791* mit 3440 x 1440 funktionieren aber leider auch nur die 60Hz – die von Monitorseite her möglichen 100Hz lassen sich dagegen nicht auswählen (außerdem werden am Samsung über dessen USB-Hub angeschlossene Geräte wie Tastatur und Maus nicht erkannt).

Wirklich schlecht umgesetzt sind die automatischen Abläufe beim Anschluss eines externen Displays. Wenn ich mein im Betrieb befindliches Surface Pro X* mit angedocktem Type Cover mit einem USB-C Monitor (mit daran angeschlossener Tastatur und Maus) verbinde, erwarte ich das folgende Verhalten: Windows 10 hat sich gemerkt, dass ich bei einer Verbindung mit diesem Monitor nur das externe Display angeschaltet haben möchte, wechselt entsprechend die Bildausgabe und ich kann das Type Cover zuklappen und einfach an der externen Tastatur und Maus weiterarbeiten.

Was macht Windows 10 auf dem Surface Pro X* stattdessen? Zunächst einmal erweitert Windows grundsätzlich das Bild auf das externe Display. Klappe ich dann das Type Cover zu, geht das Surface Pro X in den Ruhemodus. Mit der externen Tastatur oder Maus kann ich das Surface dann zwar wieder aufwecken, das triggert dann aber erstmal die Windows Hello Gesichtserkennung (die mit zugeklapptem Type Cover natürlich nicht funktioniert), irgendwann kommt dann die Pin-Eingabemaske. Nach der Eingabe wird man anschließend vom Tablet-Modus auf dem externen Display begrüßt, weil das Tablet bei abgedocktem Type Cover natürlich automatisch in den Tablet-Modus wechseln soll – leider gibt es da keine Ausnahme bei angeschlossenem externen Display…

So macht das echt keinen Spaß.

--
Beitrag interessant? Ich freue mich über einen Kauf bei Amazon*.

GUI Ikea Tradfri@GNU/Linux

Dank dem Constrained Application Protocol (CoAP) zur Maschine-zu-Maschine-Kommunikation können etwa die Tradfri-Leuchten am Ikea Gateway auch unter GNU/Linux gesteuert werden.

Unter Fedora müssen wir dafür nur libcoap installieren:

sudo dnf install libtool autoconf automake make gcc gcc-c++ kernel-devel
git clone --recursive https://github.com/obgm/libcoap.git
cd libcoap
git checkout dtls
git submodule update --init --recursive
./autogen.sh
./configure --disable-documentation --disable-shared
make
sudo make install

Jetzt noch die IP-Adresse des Ikea Gateways (im Folgenden: GATEIP) und den auf dessen Rückseite stehenden Sicherheitsschlüssel (im Folgenden: SCHLÜSSEL) zusammensuchen.

Dann ins Verzeichnis „/usr/local/bin“ wechseln und einen neuen Benutzer (im Folgenden: BENUTZERNAME) am Gateway anmelden:

./coap-client -m post -u "Client_identity" -k "SCHLÜSSEL" -e '{"9090":"BENUTZERNAME"}' "coaps://GATEIP:5684/15011/9063"

Der Gateway liefert jetzt das Passwort (im Folgenden: PASSWORT) für den BENUTZERNAME in folgender Form zurück (die Gültigkeit des Passworts wird mit jedem gesendeten Befehl wieder auf 6 Wochen gesetzt):

{
  "9091": "PASSWORT",
  "9029": "FIRMWARE_VERSION_GATEWAY"
}

Ab jetzt können mit BENUTZERNAME und PASSWORT CoAP-Befehle zur Lampensteuerung an den Gateway geschickt werden. So gibt etwa der folgende Befehl alle am Gateway angemeldeten Geräte (Lampen, Dimmer etc.) zurück:

./coap-client -m get -u "BENUTZERNAME" -k "PASSWORT" "coaps://GATEIP:5684/15001"

Die Antwort sieht dann wie folgt aus:

v:1 t:CON c:GET i:aa8a {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 54 bytes cleartext
[65553,65555,65543,65552,65538,65554,65551]

In den eckigen Klammern sind die IDs (im Folgenden DEVICEID) angemeldeten Geräte. Über den folgenden Befehl können die Details zu einem Gerät abgefragt werden:

./coap-client -m get -u "BENUTZERNAME" -k "PASSWORT" "coaps://GATEIP:5684/15001/DEVICEID"

Die Antwort gibt den Typ des Geräts (im Folgenden TYP) (etwa TRADFRI bulb E27 W opal 1000lm) und den über die App zugewiesenen Namen (im Folgenden NAME) zurück, so dass die Zuordnung der IDs möglich ist. Die Antwort sieht etwa so aus:

v:1 t:CON c:GET i:cf08 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 238 bytes cleartext
{"9001":"NAME","9002":1567074262,"9020":1572159049,"9054":0,"9003":DEVICEID,"5750":2,"9019":1,"3":{"0":"IKEA of Sweden","1":"TYP","2":"","3":"1.2.214","6":1},"3311":[{"5850":1,"5851":177,"9003":0}]}

Diese Lampe könnte jetzt mit dem folgenden Befehl auf 100% Helligkeit (Wert im Befehl zwischen 0 und 254) gestellt werden:

./coap-client -m put -u "BENUTZERNAME" -k "PASSWORT" -e '{ "3311": [{ "5851": 254 }] }' "coaps://GATEIP:5684/15001/DEVICEID"

Damit nicht immer die kryptische Syntax über die bash bedient werden muss, kann ein kleines GUI-Script (smarthome.sh) helfen (wobei zusätzlich zu GATEIP, PASSWORT und BENUTZERNAME noch DEVICEID1/2/3/4 durch die korrekten Device-IDs und RAUM1/2/3/4 durch beliebige Raumnamen ersetzt werden müssen):

Update (09.05.2020): Script auf Version 1.2 aktualisiert

#!/bin/sh
# Version 1.2
# Zugangsdaten des Gateways
IP="coaps://GATEIP:5684/15001/"
KEY="PASSWORT"
USER="BENUTZERNAME"
DEVICE="1"

while [ "$DEVICE" != "" ]
do

# Auswahl der zu steuernden Lampe
DEVICE=`zenity --title "Lampenauswahl" --text="Bitte Lampe wählen:" --width 400 --height 400 --list --column Auswahl --column Lampen-ID --column Standort FALSE DEVICEID1 RAUM1 FALSE DEVICEID2 RAUM2 FALSE DEVICEID3 RAUM3 TRUE DEVICEID4 RAUM4 --radiolist`

# Überprüfen, ob eine Lampe ausgewählt und bestätigt oder die Auswahl abgebrochen wurde
if [ "$DEVICE" != "" ]
then

	# Aktuelle Helligkeit auslesen und Helligkeitsregler setzen
	CURRENTHELL=`/usr/local/bin/coap-client -m get -u $USER -k $KEY $IP$DEVICE`
	pat='5851\"\:+([0-9]*)'
	[[ $CURRENTHELL =~ $pat ]]
 	HELLVALUE=$((${BASH_REMATCH[1]} * 100 / 254))

	# Auswahl der zu setzenden Helligkeit
	HELLIGKEIT=`zenity --scale --title="Helligkeitseinstellung" --text="Helligkeit der Lampe." --value=$HELLVALUE`

	# Überprüfen, ob eine Helligkeit ausgewählt und bestätigt oder die Auswahl abgebrochen wurde
	if [ "$HELLIGKEIT" != "" ]
	then
		HELLIGKEIT=$(($HELLIGKEIT * 254 / 100))

		/usr/local/bin/coap-client -m put -u $USER -k $KEY -e '{ "3311": [{ "5851": '$HELLIGKEIT' }] }'  $IP$DEVICE
	fi

fi

done

Nicht vergessen, das Script ausführbar zu machen:

chmod +x smarthome.sh

Jetzt lässt es sich starten:

./smarthome.sh

Weiterführende hilfreiche Links:

--
Beitrag interessant? Ich freue mich über einen Kauf bei Amazon*.