回答:
Cygwin 1.7.34以降、これを行うための推奨方法は、にカスタムdb_home
設定を追加すること/etc/nsswitch.conf
です。これを行うときの一般的な願いは、CygwinホームディレクトリをWindowsユーザープロファイルディレクトリと同じにすることです。この設定はそれを行います:
db_home: windows
または、同等に:
db_home: /%H
CygwinホームファイルをWindowsユーザープロファイルディレクトリのサブディレクトリに分離するなど、このスキームのバリエーションが必要な場合は、後者の形式を使用する必要があります。
db_home: /%H/cygwin
このwindows
オプションには、他にもいくつかの代替スキームがあり、%
その代わりに、%H
またはそれに加えて、いくつかのトークンを使用できます。詳細については、Cygwinユーザーガイドのnsswitch.conf
構文の説明を参照してください。
Cygwinを1.7.34より前にインストールしたか、そのmkpasswd
ユーティリティを実行して/etc/passwd
ファイルを作成した場合は、そのファイル内のユーザーのエントリを編集して、Cygwinホームディレクトリを変更できます。ホームディレクトリは、。のユーザー行の最後から2番目の要素です/etc/passwd
。¹
どちらの方法でも、HOME
シェルの起動時に環境変数が設定されます。²
このトピックの詳細については、このFAQ項目を参照してください。
脚注:
代わりに新しいSAM / ADベースのメカニズムを使用するために、移動/etc/passwd
し/etc/group
て邪魔にならないことを検討してください。
%HOME%
コントロールパネルから簡単に設定することは可能ですが、公式にはお勧めしません。上記のメカニズムを不正に無効にするだけでなく、を介してシェルスクリプトを実行する場合など、常に機能するとは限りませんcron
。
ssh
編集するまで正しく機能/etc/passwd
しません。
db_home: /%H
(ローカルユーザー名の代わりに)ドメインユーザー名を解決する場合がありますが、これは希望するものではない可能性があります。db_home: /cygdrive/c/Users/%U
私が欲しかったことをした。
db_home: windows
、sh
起動に約2.5〜3.5秒かかります。を使用するとdb_home: /cygdrive/c/Users/%U
、sh
開始までに約0.9〜1.0秒かかります。db_home
行を削除するか、Windowsのホームディレクトリにハードコードすると、起動にsh
約0.2〜0.3秒かかります。私はハードコーディングされたソリューションを使用しています、例えばdb_home: /cygdrive/c/Users/susam
、コマンドを使用してsh
コマンドプロンプトからシェルスクリプトを実行することが多いためを使用します。たとえばsh foo.sh
、2秒以上待つのが不便になります。
Cygwin 1.7.34以降を使用している場合、Cygwinは、ホームディレクトリ、ログインシェル、およびgecos情報をフェッチする方法の構成をサポートしています/etc/nsswitch.conf
。これについては、Cygwinユーザーガイドのセクションで詳しく説明しています。
以前に/etc/passwd
または/etc/group
ファイルを作成したことがある場合は、それらを削除し、新しいWindowsセキュリティモデルからPOSIXへのマッピングを使用してCygwinを構成する必要があります。
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
/etc/nsswitch.conf
ファイルのdb_home:
設定は、Cygwinは、ユーザのホームディレクトリをフェッチする方法を定義します。のデフォルト設定db_home:
は
db_home: /home/%U
したがって、デフォルトでは、Cygwinはホームディレクトリをに設定するだけです/home/$USERNAME
。ただし、他のカスタムパスを指すように変更することもできます。サポートされているワイルドカード文字は次のとおりです。
%u
Cygwinのユーザー名(小文字のu)。%U
Windowsユーザー名(大文字のU)。%D
NetBIOSスタイルのWindowsドメイン。%H
POSIXスタイルのWindowsホームディレクトリ。なお、db_home:
設定では、これは次のように、先行するスラッシュの直後でのみ意味がdb_home: /%H/cygwin
%_
スキーマを区切るためにスペースとタブ文字が使用されるため、ファイル名のスペースは次のように指定する必要があります %_
(アンダースコア)あります。%%
パーセント文字。パスの代わりに、事前定義された4つの名前付きパススキーマの1つを指定できます。
windows
ユーザのホームディレクトリは、Windowsのホームディレクトリの線に沿って、一般的なものとして使用されているのと同じディレクトリに設定されています%USERPROFILE%
かC:\Users\$USERNAME
。もちろん、WindowsディレクトリはCygwinによってPOSIXスタイルに変換されます。
cygwin
ADのみ:ユーザーのホームディレクトリは、cygwinUser補助クラスのcygwinHome属性で指定されたPOSIXパスに設定されます。「cygwinスキーマ」というセクションも参照してください。
unix
ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。「UNIXスキーマ」というセクションも参照してください。
desc
ユーザーのホームディレクトリは、SAMまたはADのユーザーの説明属性のhome = "..." XMLのような設定で指定されたPOSIXパスに設定されます。詳細については、「descスキーマ」を参照してください。
以下は、CygwinのユーザーのホームディレクトリをWindowsのホームディレクトリに使用されるものと同じにします。
db_home: windows
使用してそれらのためのCygwin 1.7.33またはそれ以前に、更新最新バージョンのCygwinと削除以前に使用/etc/passwd
して/etc/group
ファイルは、その後、上記の手順を参照してください。
それ以外の場合は、以下の古い手順に従ってください。
まず、ユーザープロファイルを指すWindows環境変数をHOMEに設定します。
HOME
%USERPROFILE%
次に/etc/passwd
、%HOME%
作成したWindows 変数でCygwin ファイルを更新します。経由シェルログインやリモートログインssh
に依存する/etc/passwd
彼らに、ユーザーの場所教えて$HOME
パスを。
Cygwin bashコマンドプロンプトで、次のように入力します。
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
-d
一方、スイッチは、ドメインユーザーを含めることがあるmkpasswd伝え-l
出力のみ、ローカルマシンのユーザーにあります。Windowsドメインコントローラーからユーザー情報を取得する職場でPCを使用している場合、これは重要です。
これで、グループに対しても同じことができますが、Windowsドメインの一部であるコンピューターを使用する場合を除き、これは必要ありません。CygwinはWindowsアカウントデータベースからグループ情報を読み取りますが/etc/group
、マシンがドメインコントローラーから頻繁に切断される場合は、ファイルを追加できます。
Cygwin bashプロンプトで、次のように入力します。
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
ここで、Cygwinを終了して再起動します。HOMEパスがWindowsユーザープロファイルと同じ場所を指していることがわかります。/cygdrive/c/Users/username
mkgroup
上記の目的を明確にするために説明を追加しました。
私はかなり単純なことをしました。Windows 7の環境変数を変更したくありませんでした。そこで、Cygwin.batファイルを直接編集しました。
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
これは、このホームディレクトリでローカルシェルを起動するだけです。それが私が欲しかったものです。これにリモートアクセスするつもりはないので、これでうまくいきました。
%HOME%
Cygwin vim $HOME
が宣言した新しいパスを使用する一方で、例はGvimであり、これは古いWindowsの場所で別個のvim構成を維持します。
Cygwin mount
は、ディレクトリをマウントできるbindメソッドをサポートするようになりました。したがって、次の行をに追加して/etc/fstab
、シェルを再起動するだけです。
c:/Users /home none bind 0 0
HOME環境変数を変更します。
XPでは、[マイコンピュータ]を右クリック>> [プロパティ] >> [詳細] >> [環境変数] >> [ユーザー変数] >> [変数HOMEを選択] >>編集
$ HOMEのビットを優先して修正/更新を追加したいと思います。/ etc / passwd内のホームディレクトリがすべてのものより優先されます。
私は長い間Cygwinを使用しており、Windows 7 x64とCygwin V1.126をクリーンインストールしました。私はなぜsshを実行するたびに次の理由で取得し続けるのかを理解しようと努力していました:
e:\>ssh foo.bar.com
Could not create directory '/home/dhaynes/.ssh'.
The authenticity of host 'foo.bar.com (10.66.19.19)' can't be established.
...
Windows環境でHOME = c:\ users \ dhaynes定義を追加しましたが、それでも「/ home / dhaynes」を作成しようとしました。HOMEを/ cygdrive / c / users / dhaynesに設定することを含め、あらゆるコンボを試しました。エラーメッセージをグーグル検索して、何も見つからなかった、cygwinサイトで何も見つからなかった。私はbash.exeではなくcmd.exeからcygwinを使用していますが、両方に問題がありました。
/ etc / passwdのホームディレクトリが$ HOME環境変数よりも優先されていることに、ようやく気づきました。私は「mkpasswd -l> / etc / passwd」を再実行し、ホームディレクトリを更新しました。これで、すべてがsshで問題なく動作します。
これはsysadminの経験を持つLinuxタイプには明らかかもしれませんが、主にWindowsを使用している私たちにとっては、少しあいまいです。
cygwinがバンドルされているcwRsync(Cygwin + Rsync for Windows)を使用していて、/ etc / passwdが見つかりませんでした。
そしてそれは言い続けました
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
そこで、rsyncを実行する前にHOME変数を変更するバッチファイルを作成しました。何かのようなもの:
set HOME=.
rsync /path1 user@host:/path2
そしてビオラ!.sshフォルダーが現在の作業ディレクトリに表示され、rsyncがrsaフィンガープリントで煩わしくなくなりました。
これはクイックホットフィックスですが、後でHOMEをより安全な場所に変更する必要があります。
db_home:
から引用符を外し、機能させるようにしてください。