職場のコンピューターで 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
オプションを just に変更してみました/bin/sh
が、シェルは変更されませんでした。
StackExchange の過去の質問では、/etc/passwd
ファイルを変更するよう提案されていましたが、HOME ディレクトリを自動的に作成していたコード ブロックをコメント アウトした後でのみ、これを機能させることができました/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>
答え1
db_home: unix /%H/Apps/cygwin/home/shaun
あなたが参照しているマニュアルページには、unix
または両方ではなく、どちらか一方/path
のみ。
AD 管理者がunixHomeDirectory
組織内の Cygwin を使用する各ユーザーに対して値を設定しない限り、まったく使用せずunix
、代わりにパスを使用します。
あなたが提示した内容を修正することをお勧めします:
db_home: /%H/Apps/cygwin/home/%u
これにより、同じマシン上の複数のユーザーに対して設定が機能するようになります。
このファイルに加えた変更はすべて無視されたようです。
設定を上書きする方法は 2 つあります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
コマンドを使用してエイリアスを作成する必要があります。ネットワーク ドライブのマップは永続的ではありませんが、起動のたびに実行するスクリプトを Windows フォルダーに配置する必要があります。cmd.exe
subst
Start