Tujuan saya adalah meluncurkan skrip Autohotkey sederhana di mesin Windows 10 dari host Ubuntu dalam jaringan pribadi yang sama. Setelah googling, saya menemukan winexe , yang kedengarannya seperti dapat melakukan apa yang saya inginkan, tetapi setelah banyak percobaan, saya gagal menghubungkannya ke Windows 10 ("Gagal membuka koneksi - NT_STATUS_CONNECTION_RESET", googling lebih lanjut tidak membantu). Sebagai solusi kedua, saya telah menginstal server SSH pada mesin Windows (Bitvise SSH Server). Sekarang saya bisa masuk dari Ubuntu melalui ssh ke Windows atau menjalankan perintah di mesin Windows:
$ ssh user@windowsmachine command
Ini berfungsi untuk perintah biasa seperti DIR, MKDIR, ... tetapi tidak berfungsi untuk skrip Autohotkey. E.g., dengan
$ ssh user@windowsmachine 'C:\path\to\script.ahk'
tidak ada yang terjadi pada mesin Windows (diluncurkan secara lokal, skrip pengujian ini hanya menampilkan kotak pesan ucapan). Upaya berikut juga tidak berhasil:
$ ssh user@windowsmachine '"C:\Program Files\AutoHotkey\AutoHotkey.exe" C:\path\to\script.ahk'
$ ssh user@windowsmachine 'cmd.exe /c C:\path\to\script.ahk'
PEMBARUAN: Triknya hampir berhasil. E.g., ia meluncurkan calc.exe:
$ ssh user@windowsmachine calc.exe
Tetapi jika saya meluncurkan notepad.exe atau aplikasi lain, saya melihatnya di taskmanager berjalan sebagai proses latar belakang, tanpa GUI. (Saya tidak tahu wjat begitu spesifik tentang calc. Exe sehingga berjalan normal). Saya juga berhasil memperbaiki masalah dengan winexe, tetapi situasinya benar-benar sama dengan ssh - kecuali calc.exe, semua aplikasi GUI diluncurkan sebagai proses latar belakang. Masalah ini dibahas sini . Jadi intinya adalah bahwa dibutuhkan upaya besar untuk menjalankan aplikasi GUI di Windows 10 dari host Linux. Jadi saya baru saja menulis aplikasi client-server kecil saya sendiri di Qt 5, yang mendengarkan port tertentu, dan menjalankan aplikasi / skrip yang sesuai ketika perintah yang ditentukan pengguna diterima dari host lain.
sumber
Jawaban:
Windows menggunakan sesi untuk menampilkan aplikasi GUI kepada pengguna. Server ssh Anda mungkin adalah layanan windows yang dijalankan oleh pengguna SYSTEM di sesi 0, yang tanpa tampilan grafis. Dengan demikian, Anda tidak akan melihat GUI dari aplikasi yang Anda mulai.
Anda dapat memeriksa ini dengan Penjelajah Proses Sysinternals . Setelah memulainya (sebagai admin), klik kanan bilah kolom, klik "pilih kolom" dan tambahkan "Sesi", "Akses UI", "Nama Pengguna" dan "Tingkat Integritas". Informasi ini akan menunjukkan kepada Anda untuk setiap proses dalam konteks yang menjalankan aplikasi ("Sesi"), apakah itu menunjukkan jendela ("Akses UI"), di mana akun dieksekusi ("Nama Pengguna") dan dengan izin apa ( "Tingkat Integritas", berarti tinggi sebagai admin ).
Sekarang, jika Anda ingin menjalankan aplikasi dari server ssh Anda di sesi pengguna Anda, Anda dapat melakukannya dengan utilitas Sysinternals lain yang disebut PsExec :
psexec -i <session number> -accepteula <application to execute>
. Jika Anda ingin proses dijalankan dengan pengguna normal Anda, Anda juga dapat menggunakan parameter-u
dan Anda dapat menghapus izin-l
jika Anda menginginkannya. Periksa bantuan yang berjalanpsexec -?
.Untuk mengetahui nomor sesi Anda, Anda juga dapat menjalankan perintah
qwinsta
. Dengan cara ini, Anda tidak memerlukan aplikasi GUI Process Explorer.Misalnya, untuk menjalankan kalkulator, lakukan hal berikut: Dari sesi ssh, jalankan
qwinsta
, yang seharusnya memberi Anda sesuatu yang mirip dengan ini:Jadi sesi Anda yang ingin Anda gunakan adalah
1
dalam contoh ini (mungkin berbeda untuk Anda). Kemudian jalankanpsexec -i 1 -accepteula calc.exe
. Kalkulator sekarang akan muncul di desktop Anda. (itu-accepteula
mutlak diperlukan pada eksekusi pertama aplikasi. Tanpa ini, aplikasi akan menunjukkan kepada Anda perjanjian lisensi di jendela GUI, yang - tentu saja - tidak akan ditampilkan karena alasan yang disebutkan di atas. Pada panggilan selanjutnya Anda dapat mengabaikan parameter, karena setelah diterima, jendela GUI tidak akan muncul lagi)Jika Anda awali
autohotkey.exe
perintah denganpsexec
seperti yang dijelaskan di atas, saya berharap skrip bekerja, tetapi saya tidak dapat menguji sendiri karena saya tidak tahu aplikasi itu.sumber