更改Cygwin的房屋


6

我正在尝试在工作的计算机上更改Cygwin的主目录。默认情况下,我们的主目录映射到网络共享。这似乎为Cygwin造成了一些混乱,因为它在我的桌面上创建了一个目录,该目录遵循与网络共享相同的路径,另外一些前缀则基于我从中打开cygwin的位置。

如果我从安装时创建的默认快捷方式中打开Cygwin:

$ echo $HOME
/cygdrive/c/Users/shaun/Desktop/SERVER/USERS:USERS/SHAUN

如果我从PowerShell打开Cygwin:

$ echo $HOME
/usr/bin/SERVER/USERS:USERS/SHAUN

我宁愿将我的主目录放在我自己设置的用于管理程序的本地程序目录中。像这样:

/cygdrive/c/users/shaun/apps/cygwin/home/shaun

cygwin建议,执行此操作的首选方法是在中输入/etc/nsswitch.conf。看起来应该这样做:

db_home: unix /%H/Apps/cygwin/home/shaun

我对此文件所做的任何更改似乎都将被忽略。我重新启动终端,即使我故意弄乱了语法,也没有任何错误。我尝试过但失败的一些选项:

db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
db_home: /%H/Apps/cygwin/home/shaun
db_home: unix /%H/Apps/cygwin/home/shaun
db_home: cygwin desc
db_home: cygwin /path /%H/Apps/cygwin/home/shaun

每次尝试后,我都重新启动了Cygwin进程。我还尝试将db_shell选项更改为/bin/sh仅作为实验,但外壳没有更改。

过去在StackExchange中提出的问题建议更改/etc/passwd文件,只有注释掉/etc/profile自动创建HOME目录的代码块后,我才能使该文件生效。然后,过了一段时间,它又回到了旧家。

是否有什么我失踪有关/etc/nsswitch.conf文件?看起来这是设置自定义配置的一种简单便捷的方法。Cygwin不建议您使用其他替代方法,但如果我错了,请告诉我哪种方法是首选。

我目前 /etc/nsswitch.conf

    # /etc/nsswitch.conf
    #
    #    This file is read once by the first process in a Cygwin process tree.
    #    To pick up changes, restart all Cygwin processes.  For a description
    #    see https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch
    #
    # Defaults:
    # passwd:   files db
    # group:    files db
    # db_enum:  cache builtin
    # db_home:  /home/%U
    db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
    # db_shell: /bin/bash
    # db_gecos: <empty>

编辑您的问题,以包括/etc/nsswitch.conf
DavidPostill

您是否正在运行cygwin服务器?还是任何作为Windows服务运行的cygwin进程?如果是这样,那么您在更改nsswitch.conf时需要重新启动所有这些程序。
DavidPostill

按照文档中的注释“ /etc/nsswitch.conf文件由Cygwin进程树的第一个进程完全读取一次。如果在第一个进程启动时没有/etc/nsswitch.conf文件,则没有其他进程在运行中的Cygwin进程树中,将尝试读取该文件。如果创建或更改/etc/nsswitch.conf,则必须重新启动所有需要查看更改的Cygwin进程。作为另一个进程的子进程,您也需要重新启动该进程的所有父进程。”
DavidPostill

@DavidPostill我已经重新启动了终端并检查了所有正在运行的服务。刚才我确定要重启机器,并且echo $HOMECygwin中命令的结果没有变化。
肖恩

然后我就没主意了:/我从来没有在使用网络共享的主目录的联网PC上运行cygwin。在cygwin邮件列表上,您可能会得到更快的答案发布,开发人员和专家可以在那里闲逛。您希望cygwin.com/lists.html上提到的第一个(Cygwin)邮件列表“通常,您应该在此处发送问题和错误报告。这是用于讨论与Cygwin社区版本有关的所有事情的列表。您对如何使用Cygwin有疑问...
DavidPostill

Answers:


1

db_home: unix /%H/Apps/cygwin/home/shaun

你参考手册会告诉你用unix 还是一个/path,但不能同时在一起。

除非您的AD管理员unixHomeDirectory为组织中每个使用Cygwin的用户设置了值,否则根本不要使用unix路径,而要使用路径。

我建议您修改一下:

db_home: /%H/Apps/cygwin/home/%u

这样一来,该设置即可在同一台计算机上为多个用户使用。

我对此文件所做的任何更改似乎都将被忽略。

有两种方法可以覆盖nsswitch.conf设置:

  1. 运行Cygwin的mkpasswd实用程序,该实用程序从SAM或AD用户信息数据库生成/etc/passwd/etc/group从中生成信息。该机制已过时,仅应在旧版Cygwin安装中使用或用于特殊目的。

  2. %HOME%在Windows系统级别设置环境变量。

    这不仅会覆盖Cygwin,而且仅在某些情况下会覆盖Cygwin,因此不建议这样做

    检查用户和系统范围的环境变量集,以确保它不会发生在您身上。

以前在StackExchange中提出的问题建议更改/ etc / passwd文件

您应该删除它,并使用站点的Active Directory系统来/etc/nsswitch.conf控制Cygwin与之交互的方式。


0

当我在远程安装的主目录上遇到麻烦时,我使用了“映射网络驱动器”功能,因此My Documents被映射到了一个驱动器号U:\。然后U:\成为的别名My Documents。然后,我进行了编辑,/etc/passwd以便~指向的位置/cygdrive/u然后一切正常。

也可以使用本地目录来完成,但是随后subst必须使用该命令cmd.exe来创建别名,而不是“ Map Network Drive”。映射网络驱动器是永久性的,但subst不是永久性的,因此必须在Windows Start文件夹中放置一个在每次启动时执行该脚本的脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.