7

Я пытаюсь изменить домашний каталог для Cygwin на компьютере на работе. Наши домашние каталоги по умолчанию привязаны к общему сетевому ресурсу. Кажется, это вызывает некоторую путаницу у Cygwin, так как он создал каталог на моем рабочем столе по тому же пути, что и общий сетевой ресурс, с другим префиксом, основанным на том, откуда я открываю cygwin.

Если я открою Cygwin из ярлыка по умолчанию, созданного при установке:

$ echo $HOME
/cygdrive/c/Users/shaun/Desktop/SERVER/USERS:USERS/SHAUN

Если я открою Cygwin из PowerShell:

$ echo $HOME
/usr/bin/SERVER/USERS:USERS/SHAUN

Я бы предпочел, чтобы мой домашний каталог находился в локальном каталоге программ, который я настроил для управления программами самостоятельно. Как это:

/cygdrive/c/users/shaun/apps/cygwin/home/shaun

Предпочтительный способ сделать это, как рекомендует cygwin, - сделать запись в /etc/nsswitch.conf . Похоже, что это должно сделать это:

db_home: unix /%H/Apps/cygwin/home/shaun

Любые изменения, которые я внес в этот файл, казались проигнорированными. Я перезагружаю терминал, и даже когда я намеренно портю синтаксис, я не получаю ошибок. Некоторые из опций, которые я пробовал и потерпели неудачу:

db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
db_home: /%H/Apps/cygwin/home/shaun
db_home: unix /%H/Apps/cygwin/home/shaun
db_home: cygwin desc
db_home: cygwin /path /%H/Apps/cygwin/home/shaun

Я перезапускал процесс Cygwin после каждой попытки. Я также попытался изменить параметр db_shell на /bin/sh просто в качестве эксперимента, но оболочка не изменилась.

Предыдущие вопросы в StackExchange предлагали изменить файл /etc/passwd , я смог заставить его работать только после того, как закомментировал блок кода в /etc/profile который автоматически создавал каталог HOME. А потом, через некоторое время, он вернулся в старый дом.

Что-то мне не хватает в файле /etc/nsswitch.conf ? Похоже, это был бы простой и удобный способ настройки пользовательских конфигураций. Альтернативы кажутся устаревшими, которые не рекомендуются Cygwin, но если я ошибаюсь, дайте мне знать, какой метод предпочтительнее.

Мой текущий /etc/nsswitch.conf

    # /etc/nsswitch.conf
    #
    #    This file is read once by the first process in a Cygwin process tree.
    #    To pick up changes, restart all Cygwin processes.  For a description
    #    see https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch
    #
    # Defaults:
    # passwd:   files db
    # group:    files db
    # db_enum:  cache builtin
    # db_home:  /home/%U
    db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
    # db_shell: /bin/bash
    # db_gecos: <empty>

2 ответа2

2

db_home: unix /%H/Apps/cygwin/home/shaun

На странице руководства, на которую вы ссылаетесь, вам нужно использовать unix или /path , а не оба вместе.

Если ваш администратор AD не установил значение unixHomeDirectory для каждого пользователя, использующего Cygwin, в вашей организации, вы вообще не хотите использовать unix , а вместо этого путь.

Я бы предложил модификацию того, что вы дали:

db_home: /%H/Apps/cygwin/home/%u

Это позволит настройке работать для нескольких пользователей на одном компьютере.

Любые изменения, которые я внес в этот файл, казались проигнорированными.

Есть два способа переопределить параметр nsswitch.conf :

  1. Запустите утилиту Cygwin mkpasswd , которая генерирует /etc/passwd и /etc/group из баз данных информации пользователя SAM или AD. Этот механизм устарел и должен использоваться только в устаревших установках Cygwin или для специальных целей.

  2. Установите переменную среды %HOME% на системном уровне Windows.

    Это не только отвергает Cygwin, но и при определенных обстоятельствах, поэтому не рекомендуется.

    Проверьте как пользовательские, так и общесистемные наборы переменных среды, чтобы убедиться, что это не происходит с вами.

Предыдущие вопросы в StackExchange предлагали изменить файл /etc /passwd

Вы должны удалить это и использовать вместо этого систему Active Directory вашего сайта с /etc/nsswitch.conf управляющей взаимодействием Cygwin с ним.

0

Когда у меня возникли проблемы с удаленно смонтированным домашним каталогом, я использовал функцию "подключить сетевой диск", чтобы My Documents отображались на букву диска, например, U:\ . Тогда U:\ становится псевдонимом для My Documents . Затем я отредактировал /etc/passwd так, чтобы ~ указывал на /cygdrive/u и тогда все работало.

Это также можно сделать с помощью локальных каталогов, но тогда subst команда должна быть использована в cmd.exe , чтобы создать псевдоним вместо "Map Network Drive". Карта сетевого диска является постоянной, а subst - нет, поэтому скрипт, который делает это при каждой загрузке, должен быть помещен в папку « Start Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .