Изменение HOME для Cygwin

Изменение HOME для Cygwin

Я пытаюсь изменить домашний каталог для 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. А затем, через некоторое время, он вернулся к старому 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>

решение1

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 с ней.

решение2

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

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

Связанный контент