Estou tentando atualizar com segurança o diretório inicial conforme especificado em /etc/passwd
, mas os utilitários padrão do Linux - usermod e vipw - para fazer isso não são fornecidos pelo Cygwin.
Alguém poderia me dizer como eles mudaram isso no Cygwin?
Respostas:
EDITAR: Para versões recentes do Cygwin (1.7.34 e além), consulte esta pergunta mais recente .
Como a resposta de sblundy, você sempre pode editar manualmente.
Mas se você quiser fazer isso da maneira "oficial", use o
mkpasswd
comando específico do cygwin . Abaixo está um snippet dos documentos oficiais sobremkpasswd
:Há vários outros comandos realmente úteis descritos na página de documentação dos utilitários Cygwin (que inclui
mkpasswd
). O uso decygpath
no exemplo acima é outra dessas ferramentas específicas do cygwin.Já que você está nisso, provavelmente também deseja ler a documentação Usando o Cygwin de maneira eficaz com o Windows . Há um monte de conselhos realmente bons.
fonte
-d
para domínio)$ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
Isso não funcionou para mim - basicamente travou. Como sou o único usando esta máquina, poderia usar esta alternativa, que deve ser segura quer você esteja ou não em um domínio (o-c
é para "usuário atual)$ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
. Alguma ideia de como consertar isso?Acabei saindo de todos os meus shells cygwin e editando-os manualmente em um editor de texto. Por enquanto, tudo bem.
Nota: não escape dos espaços no diretório "Documents and Settings". A entrada será semelhante a
A linha é simbolizada no
:
personagem.fonte
A resposta mais simples que encontrei é fazer com que / home seja um link virtual para o diretório Home / UserProfile do Windows
Usei o cygpath, pois ele obterá o local apropriado para o diretório HOME na versão atual do Windows. Na minha caixa
cygpath -H
retorna/cygdrive/c/Users
fonte
cygwin -H
por padrão. É o local mais adequado e, como o Windows 7 também não tem espaço no seu caminho.Para o usuário atual, o seguinte funcionou para mim:
Eu confirmei que funcionou executando ssh-keygen sem nenhum argumento. Depois de fazer essa alteração, o aplicativo agora padroniza para salvar a chave em / cygdrive / c / Users / user em vez de / home / user.
Não sei se a configuração de HOME é necessária, mas fiz de qualquer maneira seguindo as instruções para configurar o TortoiseGit com o Cygwin usando a documentação oficial do Tortoise para suporte não oficial do Cygwin aqui . Configurar HOME sozinho, entretanto, não foi suficiente para o ssh-keygen reconhecer a mudança no diretório home.
Além disso, observe que a documentação oficial do Cygwin sobre este problema pode ser encontrada aqui .
Confirmado no Windows 7 usando Cygwin v1.7.35 de 64 bits.
fonte
Sempre defino HOME como uma variável de ambiente específica do usuário em Propriedades do computador.
fonte
Para evitar problemas causados por ter espaços no caminho para seu diretório home, use o curto-forma de diretório 'Profiles' do Windows - ou seja
/cygdrive/c/DOCUME~1/user
.Você pode fazer isso digitando o comando:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
fonte
Gosto de manter minha instalação do cygwin sincronizada com um pen drive e outro computador, então odeio embutir o diretório inicial. Eu uso o seguinte cygwin.bat:
SETLOCAL e ENDLOCAL certificam-se de que SHELL e HOME não substituam as variáveis env existentes para outros programas.
HOME=%~dp0..\..\doc\unix
define HOME como dois diretórios acima, no subdiretório doc / unix. Então, em .... \ doc \ unix.bashrc, eu incluoPATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
. Eu não costumavastart /wait %CD%\bin\bash
iniciar o bash, porque estou usando o Console2 , portanto, não preciso de uma janela cmd adicional.fonte
Usando a variável de ambiente do Windows: HOME
Isso funciona para mim para uma solução permanente, não portátil e sem rede; ou seja, definir a variável de ambiente HOME permanentemente no Windows.
Note que isto não afeta as sessões ssh ou telnet que sempre se referem a / etc / passwd
ref: Configurando Cygwin- Minha variável de ambiente HOME não é o que eu quero.
CMD
Para o usuário atual (precisa ser executado uma vez por usuário) ::
Para novos usuários:
Nota: Carets ^ antes dos sinais de porcentagem%
IMPORTAR ARQUIVO REG
Importe este arquivo reg ( usuário atual ):
Para novos usuários:
REGEDIT
No Regedit, em:
Para o usuário atual :
Para novos usuários:
Crie HOME como um novo valor de string expansível (* REG_EXPAND_SZ *) e coloque em % USERPROFILE%
fonte
Cygwin 1.7.34+
Para aqueles que usam o Cygwin 1.7.34 ou superior, o Cygwin suporta a configuração de como obter o diretório inicial, o shell de login e as informações do gecos em
/etc/nsswitch.conf
. Isso está detalhado na seção do Guia do Usuário do Cygwin:Se você já criou um arquivo
/etc/passwd
ou anteriormente,/etc/group
você deseja 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 pessoal do usuário. A configuração padrão paradb_home:
éPortanto, por padrão, o Cygwin apenas define o diretório inicial 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 (u minúsculo).%U
O nome de usuário do Windows (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 os caracteres espaço e TAB são usados para separar os esquemas, um espaço no nome do arquivo deve ser fornecido como%_
(um sublinhado).%%
Um personagem por cento.No lugar de um caminho, você pode especificar um dos quatro esquemas de caminho nomeados que são predefinidos.
windows
O diretório inicial do usuário é definido para o mesmo diretório que é usado como diretório inicial do Windows, normalmente algo próximo a%USERPROFILE%
ouC:\Users\$USERNAME
. Claro, o diretório do Windows é convertido para o 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 = "..." semelhante ao XML no atributo de descrição do usuário no SAM ou AD. Consulte a seção chamada “O esquema desc” para uma descrição detalhada.O seguinte fará com que o diretório inicial do usuário no Cygwin seja o mesmo que é usado para o 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 usados anteriormente
/etc/passwd
e/etc/group
, em seguida, consulte as etapas acima.Caso contrário, siga estas etapas mais antigas abaixo.
Em primeiro lugar, 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 logins do shell e os logins remotos viassh
contam com/etc/passwd
para informar a localização do$HOME
caminho do usuário .No prompt de comando Cygwin bash, digite o seguinte:
A
-d
opção diz ao mkpasswd para incluir usuários DOMAIN, enquanto-l
é apenas para usuários de máquina LOCAL de saída. Isso é importante se você estiver usando um PC no 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 faça parte de um domínio do Windows. O Cygwin lê as informações do grupo dos bancos de dados de contas do Windows, mas você pode adicionar um
/etc/group
arquivo se sua máquina for freqüentemente desconectada de seu controlador de domínio.No prompt do bash Cygwin, digite o seguinte:
Agora, saia do Cygwin e inicie-o novamente. Você deve descobrir que seu caminho de HOME aponta para o mesmo local que seu Perfil de Usuário do Windows - ou seja,
/cygdrive/c/Users/username
fonte
Não tenho certeza se é a solução mais segura, mas é uma solução possível que funciona para mim;)
fonte
Editei meu arquivo / etc / passwd diretamente (certificando-se de que nada mais o acessaria) e alterei todas as referências a / home para ser / Usuários (no Windows 7). Descobri que, para que tudo funcione corretamente, tive que excluir todos os diretórios no diretório / home (ou movê-los para o outro local apropriado). Caso contrário, o cygwin desenvolveria uma personalidade dividida onde, por exemplo, 'bash -l' começaria em / home / Pablo, mas $ HOME seria / Users / Pablo e emacs pareceria fazer o contrário. Depois de deletar / home / Pablo, tudo funcionou bem.
fonte
Eu só precisava estar dentro
C:\Users\username
quando iniciasse o cygwin. Então, acabei de adicionar.bashrc
e.profile
cd ${HOMEPATH}
Se você preferir usar em
~/.
vez de$HOMEPATH
, também pode adicionar o seguinte:export HOME=${HOMEPATH}
Assim não atrapalho a instalação do cygwin.
fonte