web-dev-qa-db-ja.com

インストール後にCygwinのホームフォルダーを変更するにはどうすればよいですか?

Cygwinをインストールしたところ、bashプロンプトのホームディレクトリがZ:ドライブにあるようです。それは私が望む場所ではありません。

これを変更するにはどうすればよいですか?

111
Nathan Long

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ホームディレクトリを変更できますそのファイルに。ホームディレクトリは、/etc/passwdのユーザーの行の最後から2番目の要素です。¹

どちらの方法でも、これによりHOME環境変数がシェルの起動中に設定されます。²

トピックの詳細については、 this FAQ item をご覧ください。


脚注:

  1. 代わりに 新しいSAM/ADベースのメカニズム を使用するために、/etc/passwd/etc/groupを邪魔にならない場所に移動することを検討してください。

  2. コントロールパネルから%HOME%を設定することは可能ですが、 公式には推奨されていません です。上記のメカニズムを不意にオーバーライドするだけでなく、cronを介してシェルスクリプトを実行する場合など、常に機能するとは限りません。

167
Warren Young

Cygwin 1.7.34+

Cygwin 1.7.34以降を使用する場合Cygwinは、/etc/nsswitch.confでホームディレクトリ、ログインシェル、gecos情報を取得する方法の設定をサポートします。これについては、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のように、直前のスラッシュの直後にのみ意味があることに注意してください。
  • %_スペースとTAB文字はスキーマを区切るために使用されるため、ファイル名のスペースは%_(アンダースコア)として指定する必要があります。
  • %%パーセント文字。

パスの代わりに、事前定義された4つの名前付きパススキーマのいずれかを指定できます。

  1. windowsユーザーのホームディレクトリは、Windowsホームディレクトリとして使用されるのと同じディレクトリに設定されます。通常は、%USERPROFILE%またはC:\Users\$USERNAMEの行に沿ったものです。もちろん、WindowsディレクトリはCygwinによってPOSIXスタイルに変換されます。

  2. cygwin ADのみ:ユーザーのホームディレクトリは、cygwinUser補助クラスのcygwinHome属性で指定されたPOSIXパスに設定されます。 「The cygwin schema」と呼ばれるセクション も参照してください。

  3. unix ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。 「Unixスキーマ」と呼ばれるセクション も参照してください。

  4. descユーザーのホームディレクトリは、SAMまたはADのユーザーの説明属性のhome = "..." XMLに類似した設定で指定されたPOSIXパスに設定されます。詳細については、「ディスクスキーマ」というセクションを参照してください。

以下は、CygwinのユーザーのホームディレクトリをWindowsホームディレクトリで使用されるものと同じにします。

db_home: windows

Cygwin 1.7.33以前

Cygwin 1.7.33以前を使用している場合は、 最新バージョンCygwin に更新し、以前に使用した/etc/passwdを削除しますおよび/etc/groupファイルの場合、上記の手順を参照してください。

そうでない場合は、以下の古い手順に従ってください。

最初に、ユーザープロファイルを指すWindows環境変数をHOMEに設定します。

  1. コントロールパネルシステムを開きます
  2. Advancedタブで、Environment Variables(下部に向かって)をクリックします
  3. [ユーザー変数]領域で[新規…]をクリックします
  4. 変数名にHOMEと入力します
  5. 変数値に%USERPROFILE%と入力します
  6. 開いているすべてのダイアログボックスで[OK]をクリックして、この新しい設定を適用します。

次に、作成したばかりのWindows /etc/passwd変数でCygwin %HOME%ファイルを更新します。 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にDOMAINユーザーを含めるように指示しますが、-lはLOCALマシンユーザーのみを出力します。これは、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

72
Christopher

とても簡単なことをしました。 Windows 7環境変数を変更したくありませんでした。そこで、Cygwin.batファイルを直接編集しました。

@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL

これにより、このホームディレクトリでローカルシェルが開始されます。それが私が欲しかったものです。これにリモートでアクセスするつもりはないので、これでうまくいきました。

29
Ajay

Cygwin mountは、ディレクトリをマウントできるbindメソッドをサポートするようになりました。したがって、次の行を/etc/fstabに追加して、シェルを再起動するだけです。

c:/Users /home none bind 0 0
18
Jihem

HOME環境変数を変更します。

xPでは、右クリックして[マイコンピュータ] >> [プロパティ] >> [詳細設定] >> [環境変数] >> [ユーザー変数] >> [変数の選択HOME] >>編集

9

$ 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.
...

HOME = c:\ users\dhaynesの定義をWindows環境に追加しましたが、それでも '/ home/dhaynes'を作成しようとし続けました。 HOMEを/ cygdrive/c/users/dhaynesに設定するなど、可能な限りすべてのコンボを試しました。エラーメッセージをGoogleで探し、何も見つけられなかった、cygwinサイトで何も見つけられなかった。 bash.exeではなくcmd.exeからcygwinを使用していますが、両方に問題がありました。

最終的に、/ etc/passwdのホームディレクトリが$ HOME環境変数より優先されていることに気付きました。 'mkpasswd -l>/etc/passwd'を再実行しただけで、ホームディレクトリが更新されました。現在はすべてsshで問題ありません。

これは、sysadminの経験があるLinuxタイプにとっては明らかかもしれませんが、主にWindowsを使用している私たちにとっては、少しあいまいです。

6
Dan Haynes

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をより安全な場所に変更する必要があります。

2
TEHEK