Para aqueles que usam o Cygwin 1.7.34 ou superior, use os métodos explicados nas outras postagens, mas não se esqueça de remover o # antes db_home:para citá-lo e fazê-lo funcionar.
Maieul 7/02/19
Respostas:
180
A partir do Cygwin 1.7.34 , a maneira recomendada de fazer isso é adicionar uma db_homeconfiguração personalizada /etc/nsswitch.conf. Um desejo comum ao fazer isso é tornar o diretório inicial do Cygwin igual ao diretório de perfil de usuário do Windows. Essa configuração fará o seguinte:
db_home: windows
Ou equivalente:
db_home: /%H
Você precisa usar o último formulário se desejar alguma variação desse esquema, como segregar os arquivos iniciais do Cygwin em um subdiretório do diretório de perfil de usuário do Windows:
db_home: /%H/cygwin
Existem vários outros esquemas alternativos para a windowsopção, além de vários outros %tokens que você pode usar em vez %Hou além dela. Veja a nsswitch.confdescrição da sintaxe no Cygwin User Guide. para obter detalhes.
Se você instalou o Cygwin anterior à 1.7.34 ou executou seu mkpasswdutilitário para ter um /etc/passwdarquivo, você pode alterar o diretório inicial do Cygwin editando a entrada do usuário nesse arquivo. Seu diretório pessoal é o penúltimo elemento na linha do usuário em/etc/passwd .¹
Seja como for, isso faz com que o HOME variável de ambiente seja definida durante a inicialização do shell.²
Consulte este item da FAQ para obter mais informações sobre o tópico.
Embora seja possível simplesmente definir %HOME%através do Painel de Controle, é oficialmente desencorajado . Ele não apenas substitui sem cerimônia os mecanismos acima, como nem sempre funciona, como ao executar scripts de shell via cron.
Observe que se você instalou o shell do Git bash em git-scm.com/download/win , você pode ter problemas com a instalação do cygwin (dependendo das opções escolhidas). Meu cygwin ~ terminou no meu diretório de usuário Win7 e sshnão funcionaria corretamente até a edição, /etc/passwdconforme descrito.
Allan
Os problemas que o @Allan menciona aqui nas instalações git são resolvidos configurando a variável de ambiente do Windows para HOME e, em seguida, recriando o /etc/passwdarquivo. Veja minha resposta aqui para evitar esses problemas.
Christopher
11
db_home: /%Hpode resolver um nome de usuário de domínio (em vez do nome de usuário local), que pode não ser o que você gostaria de ter. db_home: /cygdrive/c/Users/%Ufiz o que eu queria ter.
Abdull
2
Vejo uma diferença de desempenho entre os vários métodos. Quando uso db_home: windows, leva shcerca de 2,5 a 3,5 segundos para iniciar. Quando uso db_home: /cygdrive/c/Users/%U, leva de sh0,9 a 1,0 segundos para iniciar. Quando eu excluo a db_homelinha ou a codifico no diretório inicial do Windows, shleva cerca de 0,2 a 0,3 segundos para iniciar. Eu vou com a solução codificada, por exemplo db_home: /cygdrive/c/Users/susam, porque geralmente executo scripts de shell no Prompt de Comando usando o shcomando, por exemplo, sh foo.she torna-se inconveniente aguardar mais de 2 segundos.
27660 Susie Pal 1/16
1
Obrigado @abdull, db_home: / cygdrive / c / Usuários /% U é a resposta que eu precisava. db_home: o Windows usa "/ home /% U", que não existe na minha configuração.
Jeff Jeff
74
Cygwin 1.7.34+
Para aqueles que usam o Cygwin 1.7.34 ou superior, o Cygwin suporta a configuração de como obter informações de diretório inicial, shell de login e gecos no /etc/nsswitch.conf. Isso está detalhado na seção Guia do usuário do Cygwin:
Se você já criou um arquivo /etc/passwdou, /etc/groupdeverá removê-los e configurar o Cygwin usando o novo modelo de Segurança do Windows para mapeamentos POSIX.
A configuração /etc/nsswitch.confdo arquivo db_home:define como o Cygwin busca o diretório inicial do usuário. A configuração padrão para db_home:é
db_home: /home/%U
Portanto, por padrão, Cygwin apenas define o diretório home como /home/$USERNAME. Você pode alterar isso para apontar para qualquer outro caminho personalizado que desejar. Os caracteres curinga suportados são:
%u O nome de usuário do Cygwin (que é minúsculo).
%U O nome de usuário do Windows (que é U maiúsculo).
%D Domínio do Windows no estilo NetBIOS.
%HDiretório inicial do Windows no estilo POSIX. Observe que, para a db_home:configuração, isso só faz sentido logo após a barra anterior, como emdb_home: /%H/cygwin
%_Como espaço e caracteres TAB são usados para separar os esquemas, um espaço no nome do arquivo deve ser fornecido como %_(isso é um sublinhado).
%% Um personagem por cento.
No lugar de um caminho, você pode especificar um dos quatro esquemas de caminho nomeados predefinidos.
windowsO diretório inicial do usuário é definido como o mesmo diretório usado no diretório inicial do Windows, geralmente algo como %USERPROFILE%ou C:\Users\$USERNAME. Obviamente, o diretório do Windows é convertido no estilo POSIX pelo Cygwin.
cygwinSomente AD: o diretório inicial do usuário é definido como o caminho POSIX fornecido no atributo cygwinHome da classe auxiliar cygwinUser. Veja também a seção chamada “O esquema cygwin” .
unixSomente AD: o diretório inicial do usuário é definido como o caminho POSIX fornecido no atributo unixHomeDirectory da classe auxiliar posixAccount. Veja também a seção chamada “O esquema unix” .
descO diretório inicial do usuário é definido como o caminho POSIX fornecido na configuração home = "..." XML-similar no atributo de descrição do usuário no SAM ou AD. Veja a seção “O esquema desc” para uma descrição detalhada.
A seguir, o diretório inicial do usuário no Cygwin tornará o mesmo usado no diretório inicial do Windows.
db_home: windows
Cygwin 1.7.33 ou anterior
Para aqueles que usam o Cygwin 1.7.33 ou anterior, atualize para a versão mais recente do Cygwin e remova os arquivos /etc/passwde os /etc/grouparquivos usados anteriormente, e siga as etapas acima.
Caso contrário, siga estas etapas anteriores abaixo.
Primeiramente, defina uma variável de ambiente do Windows para HOME que aponte para o seu perfil de usuário:
Sistema aberto no painel de controle
Na guia Avançado, clique em Variáveis de ambiente (na parte inferior)
Na área Variáveis do usuário, clique em "Novo ..."
Para Nome da variável, insira HOME
Para Valor variável, insira %USERPROFILE%
Clique em OK em todas as caixas de diálogo abertas para aplicar esta nova configuração
Agora vamos atualizar o /etc/passwdarquivo Cygwin com a %HOME%variável do Windows que acabamos de criar. Os logons do shell e os logins remotos via sshcontarão /etc/passwdcom a localização do $HOMEcaminho do usuário .
No prompt de comando do Cygwin bash, digite o seguinte:
O -dcomutador diz ao mkpasswd para incluir usuários DOMAIN, enquanto -ldeve apenas gerar usuários de máquinas LOCAL. Isso é importante se você estiver usando um PC no local de trabalho, onde as informações do usuário são obtidas de um Controlador de Domínio do Windows.
Agora, você também pode fazer o mesmo para grupos, embora isso não seja necessário, a menos que você esteja usando um computador que faz parte de um domínio do Windows. O Cygwin lê as informações do grupo nos bancos de dados da conta do Windows, mas você pode adicionar um /etc/grouparquivo se a sua máquina estiver frequentemente desconectada do seu Controlador de Domínio.
Agora, saia do Cygwin e inicie novamente. Você deve achar que o caminho HOME aponta para o mesmo local que o seu Perfil de Usuário do Windows - ou seja,/cygdrive/c/Users/username
Ben está correto, basta adicionar uma entrada para o usuário atual especificando -c. Se você fizer isso, o Cygwin exibirá ????? para o Usuário e Grupo ao listar arquivos em sistemas de arquivos compartilhados, pois não haverá registros para outros usuários e grupos no seu Domínio ou computador local.
Christopher
1
Posso sugerir uma pequena alteração na redação: em vez de 'Agora, atualize seu arquivo Cygwin / etc / passwd com um novo caminho $ HOME', eu sugeriria 'Agora vamos atualizar o arquivo Cygwin / etc / passwd com o Variável HOME que acabamos de criar. Muito obrigado
Robert
With -d Demora alguns minutos (eu matei após 5) minutos para concluir. Então, eu executei novamente com -c. Tudo de bom para as minhas necessidades.
bartosz.r
1
@ Samuel Adicionei uma explicação para esclarecer o objetivo mkgroupacima.
Christopher
30
Eu fiz algo bastante simples. Eu não queria alterar a variável de ambiente do Windows 7. Então eu editei diretamente o arquivo Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Isso apenas inicia o shell local com este diretório inicial; era isso que eu queria. Não vou acessar remotamente isso, então funcionou para mim.
Segundo, como não posso alterar minha variável de ambiente doméstico na minha máquina de desenvolvimento.
Deqing
@WernerCD Gostaria apenas de advertir que isso pode ter consequências indesejadas ao interagir com aplicativos nativos do Windows. Seus aplicativos do Windows continuarão procurando HOME no local antigo. Um exemplo seria o Gvim, que manterá uma configuração separada do vim no %HOME%local antigo do Windows , enquanto o Cygwin vim usa o novo $HOMEcaminho que você declarou.
Christopher
Isso é ótimo ... 5 anos depois e eu gosto disso porque a "engenharia" é simples o suficiente para que um newb relativo do Cygwin (como eu) use e entenda. Aliás, colocar um atalho no seu arquivo .bat em C: \ Usuários \ <nome do usuário> \ AppData \ Roaming \ Microsoft \ Windows \ SendTo significa que você pode ir em Enviar -> Cygwin no menu sensível ao contexto (clique com o botão direito do mouse) em Explorer (e abra um terminal em qualquer lugar, com ~ / definido onde quiser).
mike roedor
19
O Cygwin mountagora suporta o método de ligação , que permite montar um diretório. Portanto, você pode simplesmente adicionar a seguinte linha em /etc/fstabe depois reiniciar seu shell:
Hoje é a maneira correta. As outras respostas são obsoletas.
ceving
@ceving Isso está documentado em algum lugar?
Asad Saeeduddin
10
Mude sua variável de ambiente HOME.
no XP, clique com o botão direito do mouse em Meu computador >> Propriedades >> Avançado >> Variáveis de ambiente >> Variáveis de usuário para >> [selecione a variável HOME] >> editar
Isso mudará sua variável de ambiente HOME para todos os seus aplicativos Windows também.
mob
Muito verdadeiro. Mas quais aplicativos do Windows você usa que usam a variável HOME? Eu tenho EmacsW32 e .... Cygwin. Desde que instalei o Emacs primeiro, também é onde fica a minha casa cygwin.
Michael Paulukonis 29/09/09
1
Isso não entrará em conflito com o / etc / passwd? O padrão será HOME do / etc / passwd se a variável de ambiente não estiver definida? Se não houver conflito e o padrão será o / etc / passwd, parece a configuração perfeita: estou executando o Cygwin em um pendrive, para evitar ter que pedir permissão para instalar no trabalho e, portanto, tenho um Unix- como um ambiente no meu bolso que eu possa usar quando apenas uma caixa do Windows estiver disponível. No trabalho, terei o diretório inicial do meu computador de trabalho e em outro lugar posso ter um diretório inicial no pendrive.
Iconoclast
6
Gostaria de adicionar uma correção / atualização ao valor de $ HOME com precedência. O diretório inicial em / etc / passwd tem precedência sobre tudo.
Sou usuário do Cygwin há muito tempo e fiz uma instalação limpa do Windows 7 x64 e Cygwin V1.126. Eu estava enlouquecendo tentando descobrir por que, toda vez que rodava o ssh, eu ficava recebendo:
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.
...
Eu adiciono a definição HOME = c: \ users \ dhaynes no ambiente Windows, mas ainda assim ela continuou tentando criar '/ home / dhaynes'. Tentei todas as combinações possíveis, incluindo a configuração de HOME como / cygdrive / c / users / dhaynes. Pesquisou a mensagem de erro no Google, não encontrou nada, não encontrou nada no site cygwin. Eu uso o cygwin do cmd.exe, não o bash.exe, mas o problema estava presente em ambos.
Finalmente percebi que o diretório inicial em / etc / passwd estava tendo precedência sobre a variável de ambiente $ HOME. Eu simplesmente re-executei 'mkpasswd -l> / etc / passwd' e atualizei o diretório home, agora tudo está bem com o ssh.
Isso pode ser óbvio para os tipos de linux com experiência com o sysadmin, mas para aqueles que usam o Windows principalmente, é um pouco obscuro.
O diretório inicial em / etc / passwd NÃO tem precedência sobre tudo. No entanto, é usado como a principal fonte do caminho do diretório HOME ao efetuar login remotamente ou usando o ssh. Veja isso nas Perguntas frequentes do Cygwin cygwin.com/faq/faq.setup.html#faq.setup.home
Christopher
2
Por acaso, uso o cwRsync (Cygwin + Rsync para Windows) onde o cygwin é fornecido, e não consegui encontrar o arquivo / etc / passwd.
E continuou dizendo
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Então, eu escrevi um arquivo em lotes que mudou a variável HOME antes de executar o rsync. Algo como:
set HOME=.
rsync /path1 user@host:/path2
E viola! A pasta .ssh apareceu no diretório de trabalho atual e o rsync parou de ser irritante com as impressões digitais rsa.
É um hotfix rápido, mas mais tarde você deve alterar HOME para um local mais seguro.
db_home:
para citá-lo e fazê-lo funcionar.Respostas:
A partir do Cygwin 1.7.34 , a maneira recomendada de fazer isso é adicionar uma
db_home
configuração personalizada/etc/nsswitch.conf
. Um desejo comum ao fazer isso é tornar o diretório inicial do Cygwin igual ao diretório de perfil de usuário do Windows. Essa configuração fará o seguinte:Ou equivalente:
Você precisa usar o último formulário se desejar alguma variação desse esquema, como segregar os arquivos iniciais do Cygwin em um subdiretório do diretório de perfil de usuário do Windows:
Existem vários outros esquemas alternativos para a
windows
opção, além de vários outros%
tokens que você pode usar em vez%H
ou além dela. Veja ansswitch.conf
descrição da sintaxe no Cygwin User Guide. para obter detalhes.Se você instalou o Cygwin anterior à 1.7.34 ou executou seu
mkpasswd
utilitário para ter um/etc/passwd
arquivo, você pode alterar o diretório inicial do Cygwin editando a entrada do usuário nesse arquivo. Seu diretório pessoal é o penúltimo elemento na linha do usuário em/etc/passwd
.¹Seja como for, isso faz com que o
HOME
variável de ambiente seja definida durante a inicialização do shell.²Consulte este item da FAQ para obter mais informações sobre o tópico.
Notas de rodapé:
Considere mudar
/etc/passwd
e/etc/group
sair do caminho para usar o novo mecanismo baseado em SAM / AD .Embora seja possível simplesmente definir
%HOME%
através do Painel de Controle, é oficialmente desencorajado . Ele não apenas substitui sem cerimônia os mecanismos acima, como nem sempre funciona, como ao executar scripts de shell viacron
.fonte
ssh
não funcionaria corretamente até a edição,/etc/passwd
conforme descrito./etc/passwd
arquivo. Veja minha resposta aqui para evitar esses problemas.db_home: /%H
pode resolver um nome de usuário de domínio (em vez do nome de usuário local), que pode não ser o que você gostaria de ter.db_home: /cygdrive/c/Users/%U
fiz o que eu queria ter.db_home: windows
, levash
cerca de 2,5 a 3,5 segundos para iniciar. Quando usodb_home: /cygdrive/c/Users/%U
, leva desh
0,9 a 1,0 segundos para iniciar. Quando eu excluo adb_home
linha ou a codifico no diretório inicial do Windows,sh
leva cerca de 0,2 a 0,3 segundos para iniciar. Eu vou com a solução codificada, por exemplodb_home: /cygdrive/c/Users/susam
, porque geralmente executo scripts de shell no Prompt de Comando usando osh
comando, por exemplo,sh foo.sh
e torna-se inconveniente aguardar mais de 2 segundos.Cygwin 1.7.34+
Para aqueles que usam o Cygwin 1.7.34 ou superior, o Cygwin suporta a configuração de como obter informações de diretório inicial, shell de login e gecos no
/etc/nsswitch.conf
. Isso está detalhado na seção Guia do usuário do Cygwin:Se você já criou um arquivo
/etc/passwd
ou,/etc/group
deverá removê-los e configurar o Cygwin usando o novo modelo de Segurança do Windows para mapeamentos POSIX.A configuração
/etc/nsswitch.conf
do arquivodb_home:
define como o Cygwin busca o diretório inicial do usuário. A configuração padrão paradb_home:
éPortanto, por padrão, Cygwin apenas define o diretório home como
/home/$USERNAME
. Você pode alterar isso para apontar para qualquer outro caminho personalizado que desejar. Os caracteres curinga suportados são:%u
O nome de usuário do Cygwin (que é minúsculo).%U
O nome de usuário do Windows (que é U maiúsculo).%D
Domínio do Windows no estilo NetBIOS.%H
Diretório inicial do Windows no estilo POSIX. Observe que, para adb_home:
configuração, isso só faz sentido logo após a barra anterior, como emdb_home: /%H/cygwin
%_
Como espaço e caracteres TAB são usados para separar os esquemas, um espaço no nome do arquivo deve ser fornecido como%_
(isso é um sublinhado).%%
Um personagem por cento.No lugar de um caminho, você pode especificar um dos quatro esquemas de caminho nomeados predefinidos.
windows
O diretório inicial do usuário é definido como o mesmo diretório usado no diretório inicial do Windows, geralmente algo como%USERPROFILE%
ouC:\Users\$USERNAME
. Obviamente, o diretório do Windows é convertido no estilo POSIX pelo Cygwin.cygwin
Somente AD: o diretório inicial do usuário é definido como o caminho POSIX fornecido no atributo cygwinHome da classe auxiliar cygwinUser. Veja também a seção chamada “O esquema cygwin” .unix
Somente AD: o diretório inicial do usuário é definido como o caminho POSIX fornecido no atributo unixHomeDirectory da classe auxiliar posixAccount. Veja também a seção chamada “O esquema unix” .desc
O diretório inicial do usuário é definido como o caminho POSIX fornecido na configuração home = "..." XML-similar no atributo de descrição do usuário no SAM ou AD. Veja a seção “O esquema desc” para uma descrição detalhada.A seguir, o diretório inicial do usuário no Cygwin tornará o mesmo usado no diretório inicial do Windows.
Cygwin 1.7.33 ou anterior
Para aqueles que usam o Cygwin 1.7.33 ou anterior, atualize para a versão mais recente do Cygwin e remova os arquivos
/etc/passwd
e os/etc/group
arquivos usados anteriormente, e siga as etapas acima.Caso contrário, siga estas etapas anteriores abaixo.
Primeiramente, defina uma variável de ambiente do Windows para HOME que aponte para o seu perfil de usuário:
HOME
%USERPROFILE%
Agora vamos atualizar o
/etc/passwd
arquivo Cygwin com a%HOME%
variável do Windows que acabamos de criar. Os logons do shell e os logins remotos viassh
contarão/etc/passwd
com a localização do$HOME
caminho do usuário .No prompt de comando do Cygwin bash, digite o seguinte:
O
-d
comutador diz ao mkpasswd para incluir usuários DOMAIN, enquanto-l
deve apenas gerar usuários de máquinas LOCAL. Isso é importante se você estiver usando um PC no local de trabalho, onde as informações do usuário são obtidas de um Controlador de Domínio do Windows.Agora, você também pode fazer o mesmo para grupos, embora isso não seja necessário, a menos que você esteja usando um computador que faz parte de um domínio do Windows. O Cygwin lê as informações do grupo nos bancos de dados da conta do Windows, mas você pode adicionar um
/etc/group
arquivo se a sua máquina estiver frequentemente desconectada do seu Controlador de Domínio.No prompt do Cygwin bash, digite o seguinte:
Agora, saia do Cygwin e inicie novamente. Você deve achar que o caminho HOME aponta para o mesmo local que o seu Perfil de Usuário do Windows - ou seja,
/cygdrive/c/Users/username
fonte
mkgroup
acima.Eu fiz algo bastante simples. Eu não queria alterar a variável de ambiente do Windows 7. Então eu editei diretamente o arquivo Cygwin.bat.
Isso apenas inicia o shell local com este diretório inicial; era isso que eu queria. Não vou acessar remotamente isso, então funcionou para mim.
fonte
%HOME%
local antigo do Windows , enquanto o Cygwin vim usa o novo$HOME
caminho que você declarou.O Cygwin
mount
agora suporta o método de ligação , que permite montar um diretório. Portanto, você pode simplesmente adicionar a seguinte linha em/etc/fstab
e depois reiniciar seu shell:fonte
Mude sua variável de ambiente HOME.
no XP, clique com o botão direito do mouse em Meu computador >> Propriedades >> Avançado >> Variáveis de ambiente >> Variáveis de usuário para >> [selecione a variável HOME] >> editar
fonte
Gostaria de adicionar uma correção / atualização ao valor de $ HOME com precedência. O diretório inicial em / etc / passwd tem precedência sobre tudo.
Sou usuário do Cygwin há muito tempo e fiz uma instalação limpa do Windows 7 x64 e Cygwin V1.126. Eu estava enlouquecendo tentando descobrir por que, toda vez que rodava o ssh, eu ficava recebendo:
Eu adiciono a definição HOME = c: \ users \ dhaynes no ambiente Windows, mas ainda assim ela continuou tentando criar '/ home / dhaynes'. Tentei todas as combinações possíveis, incluindo a configuração de HOME como / cygdrive / c / users / dhaynes. Pesquisou a mensagem de erro no Google, não encontrou nada, não encontrou nada no site cygwin. Eu uso o cygwin do cmd.exe, não o bash.exe, mas o problema estava presente em ambos.
Finalmente percebi que o diretório inicial em / etc / passwd estava tendo precedência sobre a variável de ambiente $ HOME. Eu simplesmente re-executei 'mkpasswd -l> / etc / passwd' e atualizei o diretório home, agora tudo está bem com o ssh.
Isso pode ser óbvio para os tipos de linux com experiência com o sysadmin, mas para aqueles que usam o Windows principalmente, é um pouco obscuro.
fonte
Por acaso, uso o cwRsync (Cygwin + Rsync para Windows) onde o cygwin é fornecido, e não consegui encontrar o arquivo / etc / passwd.
E continuou dizendo
Então, eu escrevi um arquivo em lotes que mudou a variável HOME antes de executar o rsync. Algo como:
E viola! A pasta .ssh apareceu no diretório de trabalho atual e o rsync parou de ser irritante com as impressões digitais rsa.
É um hotfix rápido, mas mais tarde você deve alterar HOME para um local mais seguro.
fonte