我正在尝试更改工作电脑上 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
just 作为实验,但 shell 并没有改变。
StackExchange 中过去的问题建议更改文件/etc/passwd
,我只能在注释掉/etc/profile
自动创建 HOME 目录的代码块后才能使其正常工作。然后,过了一段时间它又回到了原来的 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>
答案1
db_home: unix /%H/Apps/cygwin/home/shaun
您参考的手册页告诉您使用unix
或者a /path
,不能同时存在。
除非您的 AD 管理员已经为组织中每个使用 Cygwin 的用户设置了该unixHomeDirectory
值,否则您根本不想使用unix
,而是使用路径。
我建议对你提供的内容进行修改:
db_home: /%H/Apps/cygwin/home/%u
这将允许该设置适用于同一台机器上的多个用户。
我对此文件所做的任何更改似乎都被忽略了。
有两种方法可以覆盖该nsswitch.conf
设置:
运行 Cygwin
mkpasswd
实用程序,该实用程序从 SAM 或 AD 用户信息数据库生成/etc/passwd
和。此机制是/etc/group
过时的,并且仅应在旧式 Cygwin 安装中或用于特殊目的。%HOME%
在 Windows 系统级别设置环境变量。这不仅会覆盖 Cygwin,而且只会在特定情况下才会覆盖,这就是为什么不建议。
检查用户和系统范围的环境变量集,以确保它不会发生在您身上。
StackExchange 中过去的问题建议更改 /etc/passwd 文件
您应该删除它并改用您站点的 Active Directory 系统,并/etc/nsswitch.conf
控制 Cygwin 如何与其交互。
答案2
当我遇到远程安装主目录的问题时,我使用了“映射网络驱动器”功能,因此My Documents
将其映射到驱动器号,例如U:\
。然后U:\
成为的别名My Documents
。然后我进行了编辑/etc/passwd
,以便指向~
,/cygdrive/u
然后一切正常。
这也可以用本地目录来完成,但subst
必须使用命令来cmd.exe
创建别名,而不是“映射网络驱动器”。映射网络驱动器是永久性的,但subst
不是,因此必须在 Windows 文件夹中放置一个在每次启动时执行此操作的脚本Start
。