Как я могу изменить свою домашнюю папку Cygwin после установки?


Я только что установил Cygwin, и похоже, что домашний каталог в приглашении bash находится на моем диске Z:. Это не то, что я хочу.

Как я могу изменить это?

7 103

7 ответов:

начиная с Cygwin 1.7.34 рекомендуемый способ сделать это, чтобы добавить пользовательский db_home параметр /etc/nsswitch.conf. Общим желанием при этом является сделать ваш домашний каталог Cygwin равным каталогу профиля пользователя Windows. Этот параметр будет делать это:

db_home: windows

или, что то же самое:

db_home: /%H

вы должны использовать последнюю форму, если вы хотите некоторые изменения в этой схеме, например, чтобы разделить ваши домашние файлы Cygwin в a поддиректорию каталога профиля пользователя Windows:

db_home: /%H/cygwin

есть несколько других альтернативных схем windows вариант плюс несколько других % токены можно использовать вместо %H или в дополнение к нему. Смотрите the nsswitch.conf описание синтаксис на Руководство Пользователя Cygwin для сведения.

если вы установили Cygwin до 1.7.34 или запустили его mkpasswd утилиты так что у вас есть /etc/passwd file, вы можете изменить свой домашний каталог Cygwin, отредактировав запись пользователя в этом файле. Ваш домашний каталог является предпоследним элементом в строке пользователя в /etc/passwd.1

каким бы способом вы это ни делали, это вызывает HOME переменная окружения, устанавливаемая при запуске оболочки.2

посмотреть этот пункт FAQ подробнее по теме.


Примечания:

  1. рассмотреть переезд /etc/passwd и /etc/group из пути, чтобы использовать новый механизм на основе SAM / AD.

  2. пока можно просто установить %HOME% через Панель управления, это официально обескураживают. Он не только бесцеремонно переопределяет вышеуказанные механизмы, но и не всегда работает, например, при запуске сценариев оболочки через cron.

Cygwin 1.7.34+

для тех, кто использует Cygwin 1.7.34 или выше, программа поддерживает настройку как принести домашняя директория, Shell входа и дополнительной информации учетной записи информации в /etc/nsswitch.conf. Это подробно описано в разделе руководства пользователя Cygwin:

если вы ранее создали /etc/passwd или /etc/group файл, который вы хотите удалить и настроить Cygwin с помощью нового Модель безопасности Windows для сопоставления POSIX.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

The /etc/nsswitch.conf файла db_home: настройка определяет, как Cygwin выбирает домашний каталог пользователя. Значение по умолчанию для db_home: и

db_home: /home/%U

так, по умолчанию, программа просто устанавливает домашний каталог для /home/$USERNAME. Вы можете изменить это, хотя указать на любой другой пользовательский путь, который вы хотите. Поддерживаются следующие подстановочные знаки:

  • %u имя пользователя Cygwin (это нижний регистр у.)
  • %U имя пользователя Windows (это верхний регистр U).
  • %D домен Windows в стиле NetBIOS.
  • %H домашний каталог Windows в стиле POSIX. Обратите внимание, что для db_home: настройка, это имеет смысл только сразу после предшествующей косой чертой, а в db_home: /%H/cygwin
  • %_ поскольку символы пробела и табуляции используются для разделения схем, пробел в имени файла должен быть задан как %_ (это подчеркивать.)
  • %% символ в процентах.

вместо пути можно указать одну из четырех предопределенных схем именованных путей.

  1. windows домашний каталог пользователя устанавливается в тот же каталог, который используется в качестве домашнего каталога Windows, как правило, что-то вроде %USERPROFILE% или C:\Users$USERNAME. Конечно, каталог Windows преобразуется в POSIX-стиль с помощью С Cygwin.

  2. cygwin только AD: в домашнем каталоге пользователя задан путь POSIX, указанный в атрибуте cygwinHome из вспомогательного класса cygwinUser. Смотрите также раздел под названием "схема cygwin".

  3. unix только AD: в домашнем каталоге пользователя задан путь POSIX, указанный в атрибуте unixHomeDirectory из вспомогательного класса posixAccount. Смотрите также раздел под названием " unix схема".

  4. desc в домашнем каталоге пользователя установлен путь POSIX, указанный в home="..."XML-аналогичная настройка в атрибуте описания пользователя в SAM или AD. Подробное описание см. В разделе "схема desc".

следующее сделает домашний каталог пользователя в Cygwin таким же, как используется для домашнего каталога Windows.

db_home: windows

в Cygwin 1.7.33 или раньше

для тех, кто использует Cygwin 1.7.33 или ранее, обновление последняя версия Cygwin и удалить ранее использованные /etc/passwd и /etc/group файлы, см. выше.

Else, выполните следующие действия ниже.

во-первых, установите переменную среды Windows для дома, которая указывает на ваш профиль пользователя:

  1. открыть система на контроль Панель
  2. на Advanced tab click Переменные Среды (внизу)
  3. в области пользовательских переменных нажмите кнопку " Создать..."
  4. для имени переменной введите HOME
  5. для значения переменной введите %USERPROFILE%
  6. Нажмите кнопку " ОК " во всех открытых диалоговых окнах, чтобы применить этот новый параметр

теперь мы собираемся обновить Cygwin /etc/passwd файл с Windows %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 

The -d переключатель сообщает mkpasswd включить пользователей домена, в то время как -l только для вывода пользователей локальной машины. Это важно, если вы используете компьютер на работе, где пользовательская информация получена от контроллера домена Windows.

теперь вы также можете сделать то же самое для групп, хотя это не обязательно, если вы не будете использовать компьютер, который является частью домена Windows. Cygwin считывает информацию о группе из баз данных учетных записей Windows, но вы можете добавить /etc/group файл, если ваш компьютер часто отключен от своего контроллера домена.

в командной строке Cygwin bash введите следующее:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

теперь выйдите из Cygwin и запустите его снова. Вы должны найти, что ваш домашний путь указывает на то же место, что и ваш профиль пользователя Windows - т. е. /cygdrive/c/Users/username

Я сделал кое-что довольно простое. Я не хотел менять переменную среды windows 7. Поэтому я непосредственно редактировал Cygwin.Bat-файл.

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

Это просто запускает локальную оболочку с этим домашним каталогом; это то, что я хотел. Я не собираюсь удаленно обращаться к этому, так что это сработало для меня.

программа mount теперь поддержка связать метод, который позволяет монтировать каталог. Следовательно, вы можете просто добавить следующую строку /etc/fstab, затем перезагрузите оболочку:

c:/Users /home none bind 0 0

измените переменную домашней среды.

на XP щелкните правой кнопкой мыши Мой Компьютер > > Свойства > > дополнительно > > Переменные среды > > пользовательские переменные для > > [выберите переменную HOME] > > edit

Я хотел бы добавить исправление/обновление к биту о $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. Погуглил сообщение об ошибке, ничего не смог найти, ничего не смог найти на сайте cygwin. Я использую cygwin из cmd.отлично, а не Баш.exe но проблема присутствовала в обоих.

Я наконец понял, что домашний каталог в /etc/passwd имеет приоритет над переменной среды $HOME. Я просто повторно запустил "mkpasswd-l >/etc/passwd" и обновил домашний каталог, теперь все хорошо с ssh.

Это может быть очевидно для типов linux с опытом sysadmin, но для тех из нас, кто в основном использует Windows, это немного неясно.

Я использую cwRsync (Cygwin + Rsync для Windows), где cygwin поставляется в комплекте, и я не мог найти /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. Что-то вроде:

set HOME=.
rsync /path1 user@host:/path2

и вуаля! .папка ssh появилась в текущем рабочем dir и rsync перестала раздражать отпечатками пальцев rsa.

это быстрое исправление, но позже вы должны изменить дом на более безопасный местоположение.