Cygwin の HOME を変更する

Cygwin の HOME を変更する

職場のコンピューターで 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

  1. Cygwinのmkpasswdユーティリティを実行して、SAMまたはADユーザー情報データベースから生成します。このメカニズム/etc/passwd/etc/group廃止、従来の Cygwin インストールまたは特別な目的にのみ使用する必要があります。

  2. %HOME%Windows システム レベルで環境変数を設定します。

    これはCygwinを上書きするだけでなく、特定の状況下でのみ上書きするため、推奨されません

    ユーザーとシステム全体の環境変数セットの両方をチェックして、問題が発生していないことを確認してください。

StackExchangeの過去の質問では、/etc/passwdファイルを変更することが提案されています

これを削除し、代わりにサイトの Active Directory システムを使用して、/etc/nsswitch.confCygwin がどのように対話するかを制御する必要があります。

答え2

リモート マウントされたホーム ディレクトリで問題が発生したとき、「ネットワーク ドライブのマップ」機能を使用して、My Documentsたとえば というドライブ文字にマップしましたU:\。すると はU:\のエイリアスになります。次にが を指すように編集My Documentsすると、すべてが機能しました。/etc/passwd~/cygdrive/u

これはローカル ディレクトリでも実行できますが、その場合は「ネットワーク ドライブのマップ」の代わりにsubstコマンドを使用してエイリアスを作成する必要があります。ネットワーク ドライブのマップは永続的ではありませんが、起動のたびに実行するスクリプトを Windows フォルダーに配置する必要があります。cmd.exesubstStart

関連情報