最近需要在wsl下启动windows应用,但发现无论执行任何程序,如notepad.exe、powershell.exe均提示permission denied
,但我清晰的记得之前微软更新过一个版本,是可以让wsl和windows互通的,而且是比较早的一个特性,谷歌一下搜到了官方的文档:
https://docs.microsoft.com/en-us/windows/wsl/interop
经过一系列排查,才发现之前为了修改wsl的挂载权限,在/etc/wsl.conf中增加了一些配置,导致挂载的时候没有挂载执行权限。原配置:
1 | [automount] |
其中dmask和fmask代表的是挂载的目录权限和文件权限,这个和传统的linux权限(chmod)正好是完全相反的,mask是过滤的意思,比如原来644的权限,对应的mask为777-644=133
,因为原来设置的是644权限,所以必然提示permission denied
,但是如果改成fmask=033
,又会出现所有的文件都有执行权限的问题,所以要想两者兼顾,只能针对盘符进行不同的设置了,比如C盘和D盘一般都是安装的可执行程序,那么就把这两个盘挂载的时候设置为033,E盘和F盘一般为普通文件,就可以设置为133,故只需要在wsl.conf
中的mountFsTab
设置为true
,最终wsl.conf
的配置如下:
1 | [automount] |
然后修改/etc/fstab
如下:
1 | C: /mnt/c drvfs rw,relatime,uid=1000,gid=1000,metadata,umask=22,fmask=033 0 0 |
至此完美解决。