Ответ 1
В конце концов я нашел причину этой проблемы, но я все еще не уверен, почему. Cygwin очень хорошо работает для других людей в одной и той же среде.
Причина: В начале каждого приложения cygwin он пытается получить учетные данные, как описано в файле etc/nsswitch.conf
. По какой-то причине для моей учетной записи требуется много времени, так как она связывается с несколькими контроллерами домена Active Directory через LDAP.
Решение 1:. Вы можете сохранить текущий пользователь и группу в файлах etc/passwd
и etc/group
и установить cygwing, чтобы проверить их перед активным каталогом.
- Запустите
mintty.exe
и дождитесь его открытия. - Запустите
mkpasswd -c
и сохраните его в файлеetc/passwd
(вам нужно будет его создать, вывод должен быть одной строкой) - Запустите
mkgroup -c
и сохраните его в файлеetc/group
(вам нужно будет его создать, вывод должен быть одной строкой) - Откройте
etc/nsswitch.conf
и напишите
Содержимое nsswitch.conf:
passwd: files # db
group: files # db
Теперь ваш cygwin должен начинаться без изменений.
Решение 2: Существует специальное приложение CygServer, поставляемое с cygwin, которое можно запустить как службу NT или как простой процесс (просто запустите usr/sbin/cygserver.exe
). Он кэширует учетные данные и распространяет их на каждый следующий процесс cygwin во время работы cygserver.
Добавьте его к запуску или запустите его перед сеансом cygwin, и вы добры. Запуск cygserver займет время, но каждый следующий процесс cygwin начнется немедленно.
Это ваш случай?. Я хочу поделиться своими действиями по расследованию, чтобы вы могли проверить, ваш случай тот же, что и мой.
- Установите MS Network Monitor, поскольку он может показывать трафик с определенного процесса. Запустите его как администратор.
- Создайте новую вкладку захвата и нажмите "Пуск" (вам не нужно добавлять какие-либо фильтры или что-то еще).
- Запустите
mintty
, и вы увидите его в netmon: - Вы увидите список подключений
mintty
в древовидном представлении слева и кадрах TCP и LDAP справа после выбора этих соединений. - Кроме того, вы можете получить имя этих удаленных компьютеров по IP. Запустите
nbtstat -a 8.8.8.8
в командной строке (замените 8.8.8.8 одним из IP-адресов из netmon).
Идти глубже: Я все еще играю с файлом etc/nsswitch.conf, чтобы получить локальные учетные данные или, возможно, кешированные файлы, чтобы он быстрее работать без cygserver. Но еще не повезло.