如何通过 TRAMP 远程连接至 Windows 10 电脑?

背景

工作原因,需要使用某个只有 Windows 版本的 IDE。本机是 macOS 系统,目前在使用 Microsoft Remote Desktop 进行远程操作。由于被 Emacs 宠坏,十分不习惯 IDE 的编辑环境,因此想从本地通过 TRAMP 远程编辑代码,只用 IDE 进行编译和调试。

当前状态

已经可以通过 ssh 远程连接到 Windows 电脑,并在命令行中用 cmd.exe 的命令进行类似下面的操作:

ssh user@server
password: ******
dir
cd my/path

但如果我尝试用 TRAMP 连接,例如:C-x C-f,输入 /ssh:user@server,输入密码,Emacs 就会卡死,只能 C-g 取消。在网上搜索了很久,尝试了 /sftp:/sshx:/plink:,有些仍然卡死,有些不会卡死,会出现类似下面的错误,但最终都不能使用 dired 或者直接编辑文件。

'env' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
C:\Windows\system32\conhost.exe

想请教大家,如何才能利用 TRAMP 像连接 *nix 电脑一样,顺畅连接 Windows 10 电脑?

可能是卡在了匹配 shell 的 prompt

可以看看 emacs wiki 有相关的解决方法不过是针对 Linux 的

也可以调整 tramp-verbose 看下 日志

第一个 stackexchange 的回复中说使用 /sftp:,我尝试过失败了。不过这次留意看了一下,其实是我的 Emacs (30.0.50) 不支持 sftp。我也不清楚如何才能支持。

第二个本站的问题,似乎是讨论如何在 Windows 上用 TRAMP,和我的情况不同。我也在我的 remote Windows 上安装并配置了 PuTTY,没有解决问题。

不过仍然感谢回复。

Emacs wiki 上只提到如何在 Windows 上使用 TRAMP,没有说如何通过 TRAMP 访问 Windows。另外,我也试了上面说的方法,没有解决问题。

我把 tramp-verbose 从默认 3 改到了 10,尝试用 /plink: 访问,得到下面的日志:

12:35:01.829957 tramp-process-actions (3) # Waiting for prompts from remote shell...failed
12:35:01.829988 tramp-maybe-open-connection (3) # Opening connection nil for [email protected] using plink...failed
12:35:01.830913 tramp-flush-connection-properties (7) # *tramp/plink [email protected]* nil
12:35:01.830949 tramp-get-connection-property (7) # process-buffer nil; cache used: t
12:35:01.831004 tramp-get-file-property (8) # / file-truename nil; inhibit: 10; cache used: nil; cached at: nil
12:35:01.831035 tramp-flush-directory-properties (8) # /
12:35:01.831076 tramp-flush-connection-properties (7) # (tramp-file-name plink user nil 192.168.x.xxx nil nil nil) (first-password-request process-buffer null-device)

修改 shell prompt 的说法我印象中见到过,也尝试了,错误信息确实发生了变化,但最终还没能成功。

Anyway,感谢回复~

Windows安装WSL?

plink 我用过,速度还可以。试下这个: https://www.albertzhou.net/blog/2019/01/05/emacs_tramp_putty.html

只是一直无法解决读取远程.profile文件问题。用这个:

记得 putty 版本也有讲究,忘记要大于哪个版本了。现用得0.75

翻了下org文件,找到了:

貌似这个也是说如何在 Windows 上使用 TRAMP 访问远程的 *nix。我现在想要的是反过来,从 macOS 通过 TRAMP 访问 Windows 10 上的文件。

:sweat_smile: 不好意思,没看清楚

Tramp 手册里推荐用 smb

3.6 Using ‘smbclient’
=====================

In order to access a remote MS Windows host or Samba server, the
‘smbclient’ client is used.  The remote file name syntax is
‘/smb:user%domain@host:/path/to/file’.  The first part of the local file
name is the share exported by the remote host, ‘path’ in this example.

smbclient 需要另外安装 samba,macOS 自带的 SMB 是 FreeBSD 的实现不是 Samba,没有这个命令。

当然在 Windows 上也要设定 SMB 文件共享。

如需要在 Windows 上运行 shell,需要在 Samba 同时另外装 winexe

Windows 电脑上是安装了 WSL 的,但似乎并不能自动解决问题,我也没有搜到需要如何配置。

感谢,我去尝试一下。


赞!问题解决了。