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) 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.

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
  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 (D:) erstellen. Dann: sehr lange warten, bis die Laufwerkserstellung abgeschlossen ist.
  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 geladenen Menü die Windows-Wiederherstellung über externes Medium starten.
  8. 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):

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

# 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

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

	# Ü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

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*.