質問

/ etc / passwd で指定されているようにホームディレクトリを安全に更新しようとしています。 しかし、そうするための標準のLinuxユーティリティ-usermodとvipwは提供されていません Cygwin。

Cygwinでこれをどのように変更したか教えていただけますか?

役に立ちましたか?

解決 2

すべてのcygwinシェルを終了し、テキストエディターで手動で編集しました。これまでのところ、とても良い。

注:「ドキュメントと設定」のスペースをエスケープしないでください。ディレクトリ。エントリは次のようになります

user:...:/cygdrive/c/Documents and Settings/user:/bin/bash

行は文字でトークン化されます。

他のヒント

編集: Cygwinの最新バージョン(1.7.34以降)については、この新しい質問

sblundyの答えのように、いつでも手作業で編集できます。

しかし、もしあなたがそれをしたいなら、「公式」方法は、cygwin固有の mkpasswd コマンド。以下は、 mkpasswd の公式ドキュメントの抜粋です。 :

  

たとえば、次のコマンド:

     

例3.11代替ホームルートの使用

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
     

ローカルユーザーのホームディレクトリをWindowsの「プロファイル」ディレクトリに配置します。

Cygwinユーティリティで説明されている他の非常に便利なコマンドがたくさんあります。 ドキュメントページ( mkpasswd を含む)。上記の例での cygpath の使用は、これらのcygwin固有のツールのもう1つです。

あなたがそれをしている間、あなたはおそらく Cygwinの使用も読みたいと思うでしょう。 Windows のドキュメントで効果的に。たくさんの本当に良いアドバイスがあります。

私が見つけた最も簡単な答えは、/ homeをWindows Home / UserProfileディレクトリへのソフトリンクにすることです

cd /
mv home oldhome
ln -s "$(cygpath -H)" home

Windowsの現在のバージョンで、HOMEディレクトリの適切な場所を取得するため、cygpathを使用しました。私のボックスでは、 cygpath -H / cygdrive / c / Users

を返します

現在のユーザーの場合、次のように機能しました:

  1. Cygwinを閉じます。
  2. HOME Windowsユーザー環境変数を設定します。
  3. Cygwinを起動します。
  4. run" mkpasswd -c -p" $(cygpath -H)" > / etc / passwd"。
  5. Cygwinを再起動します。

ssh-keygenを引数なしで実行することで動作することを確認しました。この変更を行った後、アプリはデフォルトでキーを/ home / userではなく/ cygdrive / c / Users / userに保存するようになりました。

HOMEの設定が必要かどうかはわかりませんが、とにかくTortoiseの公式ドキュメントを使用してCygwinでTortoiseGitを設定するための手順に従って、非公式Cygwinサポートのこちら。ただし、ssh-keygenがホームディレクトリの変更を認識するには、HOMEを単独で設定するだけでは不十分でした。

また、この問題に関するCygwinの公式ドキュメントはこちら

64ビットCygwin v1.7.35を使用してWindows 7で確認済み。

[コンピューターのプロパティ]で常にHOMEをユーザー固有の環境変数として設定します。

ホームディレクトリへのパスにスペースが含まれることによって生じる問題を回避するには、Windowsの「プロファイル」ディレクトリの短い形式を使用します(例: / cygdrive / c / DOCUME〜1 / user )。

次のコマンドを入力して、これを実行できます。

mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd

cygwinのインストールをペンドライブや別のコンピューターと同期したいので、ホームディレクトリをハードコーディングするのは嫌です。次のcygwin.batを使用します。

echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

SETLOCALおよびENDLOCALは、SHELLおよびHOMEが他のプログラムの既存のenv変数を上書きしないようにします。 HOME =%〜dp0 .. \ .. \ doc \ unix は、HOMEをdoc / unixサブディレクトリの2つ上のディレクトリに設定します。次に.... \ doc \ unix.bashrcに、 PATH =" / bin:/ usr / local / bin:/ usr / X11R6 / bin:/ usr / bin" を含めます。 start / wait%CD%\ bin \ bash を使用してbashを開始しませんでした。 "nofollow"> Console2 なので、追加のcmdウィンドウは必要ありません。

Windows環境変数の使用:HOME

これは、永続的で、移植性がなく、ネットワーク以外のソリューションに役立ちます。つまり、WindowsでHOME環境変数を永続的に設定します。

これは、常に / etc / passwd を参照する ssh または telnet セッションには影響しません。

ref:Cygwinのセットアップ-私のHOME環境変数は私が望むものではありません。

CMD

current ユーザーの場合(ユーザーごとに1回実行する必要があります)::

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

新規ユーザーの場合:

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

注:キャレット^ パーセント記号%

インポートREGファイル

このregファイル( current ユーザー)をインポートします:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

新規ユーザーの場合:

Windows Registry Editor Version 5.00

[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

REGEDIT

Regeditの下:

current ユーザーの場合:

HKEY_CURRENT_USER\Environment

新規ユーザーの場合:

HKU\.DEFAULT\Environment

HOME を新しい拡張可能な文字列値(* REG_EXPAND_SZ *)として作成し、%USERPROFILE%

に配置します
  

オリジナル回答 他の場所

のクリストファー

Cygwin 1.7.34 +

Cygwin 1.7.34 以上を使用している場合、Cygwinは、 /etc/nsswitch.conf でホームディレクトリ、ログインシェル、gecos情報を取得する方法の構成をサポートしています。これについては、Cygwinユーザーガイドのセクションで詳しく説明しています。

以前に / etc / passwd または / etc / group ファイルを作成した場合、それらを削除し、新しいWindowsセキュリティモデルを使用してCygwinを構成します。 POSIXマッピングへ。

[[ -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%または< code> C:\ Users \ $ USERNAME 。もちろん、WindowsディレクトリはCygwinによってPOSIXスタイルに変換されます。

  2. cygwin ADのみ:ユーザーのホームディレクトリは、cygwinUser補助クラスのcygwinHome属性で指定されたPOSIXパスに設定されます。 &#8220;というセクションもご覧ください。 cygwinスキーマ&#8221;

  3. unix ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。 &#8220;というセクションもご覧ください。 UNIXスキーマ&#8221;

  4. desc ユーザーのホームディレクトリは、home =&quot; ...&quot;で指定されたPOSIXパスに設定されます。 SAMまたはADのユーザーの説明属性のXMLに類似した設定。 &#8220; The desc schema&#8221;と呼ばれるセクションを参照してください。詳細な説明については。

次のコマンドを実行すると、CygwinのユーザーのホームディレクトリがWindowsホームディレクトリで使用されるものと同じになります。

db_home: windows

Cygwin 1.7.33以前

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

その他、以下の古い手順に従ってください。

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

cd /home
rm -rf chris
ln -s /cygdrive/z chris

それが最も安全な解決策であるかどうかは確かではありませんが、それは私のために働く可能性のある解決策です;)

/ etc / passwdファイルを直接編集し(他に何もアクセスしていないことを確認)、/ homeへのすべての参照を/ Usersに変更しました(Windows 7)。すべてが正しく機能するためには、/ homeディレクトリ内のディレクトリを削除する(または適切な他の場所に移動する)必要があることがわかりました。それ以外の場合、cygwinは、たとえば 'bash -l'が/ home / Pabloで始まるが、$ HOMEが/ Users / Pabloであり、emacsがその逆を行うように見える、分割されたパーソナリティを開発します。 / home / Pabloを削除すると、すべて正常に機能しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top