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


121

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

どうすれば変更できますか?


1
Cygwin 1.7.34以降を使用している場合は、他の投稿で説明されている方法を使用してください。ただし、#を削除してdb_home:から引用符を外し、機能させるようにしてください。
Maieul

回答:


180

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項目を参照してください


脚注:

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

  2. %HOME%コントロールパネルから簡単に設定することは可能ですが、公式にはお勧めしません。上記のメカニズムを不正に無効にするだけでなく、を介してシェルスクリプトを実行する場合など、常に機能するとは限りませんcron


3
git-scm.com/download/winからGit bashシェルをインストールした場合、、cygwinのインストールで問題が発生可能性がある(選択したオプションによって異なります)。私のcygwin〜は私のWin7ユーザーディレクトリで終了し、説明されているようにssh編集するまで正しく機能/etc/passwdしません。
アラン

@Allanがgitインストールでここで言及する問題は、HOMEのWindows環境変数を設定してから、 /etc/passwdファイルをます。このような問題を回避するには、ここ私の回答を参照しください。
クリストファー

11
db_home: /%H(ローカルユーザー名の代わりに)ドメインユーザー名を解決する場合がありますが、これは希望するものではない可能性があります。db_home: /cygdrive/c/Users/%U私が欲しかったことをした。
Abdull

2
さまざまな方法のパフォーマンスの違いがわかります。を使用するとdb_home: windowssh起動に約2.5〜3.5秒かかります。を使用するとdb_home: /cygdrive/c/Users/%Ush開始までに約0.9〜1.0秒かかります。db_home行を削除するか、Windowsのホームディレクトリにハードコードすると、起動にsh約0.2〜0.3秒かかります。私はハードコーディングされたソリューションを使用しています、例えばdb_home: /cygdrive/c/Users/susam、コマンドを使用してshコマンドプロンプトからシェルスクリプトを実行することが多いためを使用します。たとえばsh foo.sh、2秒以上待つのが不便になります。
Susam Pal 2016

1
ありがとう@ abdull、db_home:/ cygdrive / c / Users /%Uが私が必要とした答えです。db_home:windowsは「/ home /%U」を使用しますが、これは私の構成には存在しません。
Jeff

74

Cygwin 1.7.34以降

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ドメイン。
  • %HPOSIXスタイルのWindowsホームディレクトリ。なお、db_home:設定では、これは次のように、先行するスラッシュの直後でのみ意味がdb_home: /%H/cygwin
  • %_ スキーマを区切るためにスペースとタブ文字が使用されるため、ファイル名のスペースは次のように指定する必要があります %_(アンダースコア)あります。
  • %% パーセント文字。

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

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

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

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

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

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

db_home: windows

Cygwin 1.7.33以前

使用してそれらのためのCygwin 1.7.33またはそれ以前に、更新最新バージョンのCygwinと削除以前に使用/etc/passwdして/etc/groupファイルは、その後、上記の手順を参照してください。

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

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

  1. コントロールパネルでシステムを開く
  2. 高度なタブをクリックし環境変数(下方向への)
  3. [ユーザー変数]領域で[新規]をクリックします。
  4. 変数名に入力します HOME
  5. 変数値には、 %USERPROFILE%
  6. 開いているすべてのダイアログボックスで[OK]をクリックして、この新しい設定を適用します

次に/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


7
-dは本当に遅いです。現在のユーザーのみが必要な場合は、代わりに-cを使用できます。sinewalker.wordpress.com
Ben

Benは正解です。代わりに-cを指定すると、現在のユーザーのエントリを追加できます。ただし、そうすると、Cygwinは?????を表示します。ドメインまたはローカルコンピューター上の他のユーザーおよびグループのレコードがないため、共有ファイルシステム上のファイルを一覧表示するときのユーザーおよびグループ。
クリストファー

1
表現に小さな変更を提案できますか:「今、Cygwin / etc / passwdファイルを新しい$ HOMEパスで更新する」ではなく、「今からCygwin / etc / passwdファイルを作成したHOME変数。」どうもありがとう
ロバート・

-dを使用した場合、完了するまでに数分(私は5年後に殺しました)分かかります。したがって、私は-cを使用して再実行しました。すべて私のニーズに適しています。
bartosz.r 2013年

1
@Samuel mkgroup上記の目的を明確にするために説明を追加しました。
クリストファー

30

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

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

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


2つ目は、開発マシンでホーム環境変数を変更できないためです。
2014

@WernerCDこれは、ネイティブのWindowsアプリケーションとやり取りするときに予期しない結果になる可能性があることを警告します。Windowsアプリケーションは、引き続き古い場所でHOMEを探します。%HOME%Cygwin vim $HOMEが宣言した新しいパスを使用する一方で、例はGvimであり、これは古いWindowsの場所で別個のvim構成を維持します。
クリストファー

これは素晴らしいことです。5年後、「エンジニアリング」はCygwinの比較的新しい人(私のような)が使用して理解できるほど単純なので、私はそれが好きです。ちなみに、C:\ Users \ <your_user_name> \ AppData \ Roaming \ Microsoft \ Windows \ SendToに.batファイルへのショートカットを置くと、次のコンテキスト依存(右クリック)メニューで[送信]-> [Cygwin]に移動できます。エクスプローラー(そして〜/を好きな場所に設定して、どこでもターミナルを開きます)。
マイクげっ歯類2017

19

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

c:/Users /home none bind 0 0

これは今日では正しい方法です。他の答えは時代遅れです。
2014

@cevingこれはどこかに文書化されていますか?
Asad Saeeduddin 2016年

10

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

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


1
これにより、すべてのWindowsアプリケーションのHOME環境変数も変更されます。
mob

とても本当です。しかし、どのWindowsアプリケーションでHOME変数を使用していますか?EmacsW32と……Cygwinがあります。私は最初にEmacsをインストールしたので、そこに私のcygwinホームがあります。
マイケルPaulukonis

1
これは/ etc / passwdとどういうわけか衝突しませんか?環境変数が設定されていない場合、デフォルトで/ etc / passwdのHOMEになりますか?競合がなく、デフォルトで/ etc / passwdになる場合、それは完璧なセットアップのようです。私は、Cygwinをサムドライブから実行しています。どちらも、職場でのインストールの許可を求める必要を回避するためです。そのため、UNIX- Windowsボックスしか利用できないときに使用できるポケットの環境のようです。仕事では、仕事用のコンピューターのホームディレクトリを用意します。他の場所では、サムドライブにホームディレクトリを作成できます。
iconoclast

6

$ 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を使用している私たちにとっては、少しあいまいです。


1
/ etc / passwdのホームディレクトリがすべてのものよりも優先されるわけではありません。ただし、リモートでログインするとき、またはsshを使用するときに、HOMEディレクトリパスのプライマリソースとして使用されます。Cygwin FAQからこれを参照してくださいcygwin.com/faq/faq.setup.html#faq.setup.home
Christopher

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.