Я пытаюсь изменить домашний каталог для 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
настройку:
Запустите утилиту Cygwin
mkpasswd
, которая генерирует/etc/passwd
и/etc/group
из баз данных SAM или AD с информацией о пользователях. Этот механизмустаревшийи должен использоваться только в устаревших установках Cygwin или для специальных целей.Установите
%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.