Schalten Sie die Win10-Anzeige (n) über OpenSSH aus

0

Es gibt viele Lösungen, um die Anzeige lokal auf einem Windows10-Computer zu deaktivieren. Sie sind alle eine Form der folgenden SendMessage-Zeile. Es gibt auch kleine ausführbare Dateien wie nircmd, die dies tun. Es scheint jedoch einige Einschränkungen zu geben, wenn Sie eines dieser Programme über OpenSSH ausführen. Da mein OpenSSH so konfiguriert ist, dass er genau die gleichen Anmeldeinformationen wie mein lokaler Benutzer verwendet, kann ich nicht wirklich herausfinden, warum nichts passiert. Die ps-Skriptversionen geben eine einfache 1 zurück, und Lösungen wie nircmd geben überhaupt nichts zurück. Nicht einmal ein Fehler. Wissen Sie, was hier passieren kann und wie es funktioniert?

Beispielskript:

Powershell (Add-Type '[DllImport (\ "user32.dll \")] ^ public static extern int SendMessage (int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas) :: SendMessage (- 1,0x0112,0xF170,2)

Quelle

edit: vielleicht sollte ich das andere hinzufügen nircmd Optionen wie Stummschaltung funktionieren problemlos.

narfelchen
quelle
Einige weitere Hilfsprogramme zum Ausprobieren: Bildschirm ausschalten oder Dienstprogramm zum Ausschalten anzeigen oder Abblenden .
harrymc
Danke, aber die haben alle den gleichen Effekt. Sie arbeiten lokal auf der Maschine, werden jedoch nicht über ssh ausgeführt. Das lässt mich glauben, dass der ssh irgendwie keine Displays zum Ausschalten sehen / aufzählen / erkennen kann. Aber ohne Protokoll oder Fehlermeldung habe ich keine Ideen.
narfelchen
Machst du Windows-zu-Windows?
harrymc
Da Sie OpenSSH verwenden, bedeutet dies, dass Sie von Linux zu Windows wechseln, da dies für Windows zu Windows nicht unbedingt erforderlich ist. Verwenden Sie einfach normales Windows PSRemoting. Warum versuchen Sie nun, eine Windows-Anzeige von einer Linux-Box aus fernzuschalten? Einfach nur neugierig oder Sie arbeiten unter einem lokalen Windows mit einer SSH-Sitzung und sind sich nicht sicher, warum Sie das tun möchten.
postanote
Es ist eine einfache Bequemlichkeitssache. Ich möchte in der Lage sein, die Anzeigen auf meinem Desktop von einem Hausautomationssystem aus, das auf einem Himbeer-Pi läuft, ein- und auszuschalten. Natürlich gibt es Lösungen wie das automatische Ausschalten der Displays im Leerlauf, aber das ist nicht auf Anfrage und ich schalte einfach gerne nach Belieben zwischen ihnen um. Nicht das Ende der Welt, wurde einfach zu einer Kuriosität, da alles andere funktioniert (z. B. das Umschalten von Audiogeräten).
narfelchen

Antworten:

0

Dies liegt daran, dass die interaktive Windows-Sitzung nicht die aktuelle Sitzung ist und daher nicht in einem Kontext ausgeführt wird, in dem die physische Anzeige aktiv verbunden ist. Sound und andere Funktionen sind, aber das Display ist an eine Sitzung gebunden. Sie können sich entweder interaktiv anmelden oder psexec verwenden, um den Powershell-Prozess im Kontext des Benutzers auszuführen. Wenn Sie mit psexec einverstanden sind, können Sie Folgendes verwenden:

 FOR /F "usebackq tokens=4" %s IN (`tasklist /nh /fo table /fi "imagename eq explorer.exe"`) DO psexec -accepteula -nobanner -d -i %s -w "%windir%" powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)

Dafür benötigen Sie allerdings psexec.

Wenn es mehr als eine interaktive Sitzung gibt, wird diese mehr als einmal ausgeführt.

Wenn Sie von der Stapelverarbeitung aus arbeiten, müssen Sie beide% s durch %% s ersetzen.

Dies ist der Teil, der die interaktive Sitzung sammelt:

FOR /F "usebackq tokens=4" %s IN (`tasklist /nh /fo table /fi "imagename eq explorer.exe"`) DO echo %s
shawn
quelle
Danke, ich habe eine Weile gebraucht, um das zu verstehen, aber es funktioniert einwandfrei. Wenn ich richtig verstehe, bedeutet die gesamte Zeile ungefähr "Überprüfen einer Liste ausgeführter Prozesse auf die auf dem Desktop ausgeführte PID des Explorers". Verwenden Sie diesen Kontext, um den Befehl "powershell" remote auszuführen.
narfelchen
In der Nähe ist die PID die Prozess-ID, diese erfasst jedoch die Sitzungs-ID. Die Sitzung ist die interaktive Umgebung, in der die GUI für einen einzelnen Benutzer und nicht nur für eine bestimmte Anwendung gehostet wird. Das Filtern mit explorer.exe ist der einfachste Weg, um alle interaktiven Sitzungen auf einem Gerät abzurufen.
shawn