Pergunta

Eu estou tentando atualizar com segurança o diretório home como especificado no /etc/passwd, mas os utils Linux padrão - usermod e vipw - para fazê-lo não são fornecidas por Cygwin.

Alguém poderia me dizer como eles mudaram isso em Cygwin?

Foi útil?

Solução 2

Eu acabei de sair todas as minhas conchas cygwin e editá-lo com a mão em um editor de texto. Tão longe, tão bom.

Nota: não escapam os espaços no "Documents and Settings" diretório. A entrada será semelhante

user:...:/cygdrive/c/Documents and Settings/user:/bin/bash

A linha é indexado sobre o caráter :.

Outras dicas

EDIT: Para versões recentes do Cygwin (1.7.34 e além), consulte esta nova questão .

A resposta de como sblundy, você pode editar a-lado.

Mas se você quiser fazê-lo da maneira "oficial", use o específico do cygwin comando mkpasswd . Abaixo está um trecho dos documentos oficiais sobre mkpasswd :

Por exemplo, este comando:

Exemplo 3.11. Usando uma raiz casa alternativo

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd

colocaria diretórios home nas janelas dos usuários locais diretório Profiles '.

Há um monte de outros comandos realmente úteis descritos nas Cygwin Utilities página de documentação (que inclui mkpasswd). O uso de cygpath no exemplo acima é outra dessas ferramentas específicas do cygwin.

Enquanto você está nisso, você provavelmente também quer ler a Usando Cygwin eficazmente com documentação do Windows . Há um monte de realmente bons conselhos.

A resposta mais simples eu encontrei é fazer com que / home para ser um soft link para o diretório do Windows Home / UserProfile

cd /
mv home oldhome
ln -s "$(cygpath -H)" home

Eu costumava cygpath como vai ficar o local adequado para o diretório HOME na versão atual do Windows. Na minha caixa de cygpath -H retornos /cygdrive/c/Users

Para o usuário atual o seguinte trabalhou para mim:

  1. Fechar Cygwin.
  2. Definir a variável de ambiente usuário doméstico do Windows.
  3. Inicie o Cygwin.
  4. executar "mkpasswd -c -p "$ (cygpath -H)"> / etc / passwd".
  5. Restart Cygwin.

I confirmou que trabalhou executando ssh-keygen sem nenhum argumento. Depois de fazer essa alteração o aplicativo agora o padrão é salvar a chave para / cygdrive / c / Users / usuário em vez de / home / usuário.

Eu não sei se ambiente doméstico é necessária, mas mesmo assim eu fiz por instruções para configurar TortoiseGit com Cygwin usando a documentação oficial da tartaruga de apoio Cygwin não oficial aqui . Ambiente doméstico sozinho embora não foi suficiente para ssh-keygen para reconhecer a mudança diretório home.

Além disso, nota que a documentação oficial do Cygwin sobre esta questão pode ser encontrada aqui .

Confirmado no Windows 7 usando 64-bit Cygwin v1.7.35.

Eu sempre set casa como uma variável de ambiente específico do usuário em propriedades do computador.

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

Eu gosto de manter minha instalação do cygwin sincronizado para um pen drive e outro computador, então eu odeio embutir o diretório home. Eu uso o seguinte cygwin.bat:

echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

SETLOCAL e ENDLOCAL certificar-se de que a Shell e em casa não clobber variáveis ??env existente para outros programas. conjuntos HOME=%~dp0..\..\doc\unix casa para ser dois diretórios para cima, no subdiretório doc / unix. Então, em .... \ doc \ unix.bashrc, eu incluo PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin". Eu não uso start /wait %CD%\bin\bash para começar a festa, porque eu estou usando Console2 , então eu não preciso uma janela cmd adicional.

Usando Ambiente Windows Variável: HOME

Isso funciona para mim para um não-portátil, solução permanente, não-rede; ou seja, definindo a variável de ambiente HOME permanentemente no Windows.

Nota que isso não afeta ssh ou telnet sessões que sempre se referem a / etc / passwd

ref:. Configurando Cygwin- meu variável de ambiente HOME não é o que eu quero

CMD

Para atuais user (precisa ser executado uma vez por usuário) ::

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Para new Usuários:

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Nota: carets ^ antes por cento-sinais%

IMPORT REG arquivo

Importar este arquivo reg ( atual user):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

Para new usuários:

Windows Registry Editor Version 5.00

[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

REGEDIT

Em Regedit, em:

Para atual user:

HKEY_CURRENT_USER\Environment

Para new Usuários:

HKU\.DEFAULT\Environment

Criar HOME como um novo Valor da cadeia expansível (* REG_EXPAND_SZ *) e colocar em % USERPROFILE%

resposta por Christopher de outro lugar

Cygwin 1.7.34 +

Para aqueles que usam Cygwin 1.7.34 ou mais suportes Cygwin configurando como buscar diretório home, shell de login e informações gecos em /etc/nsswitch.conf. Isto é detalhado na seção Guia de Cygwin Usuário:

Se você criou anteriormente um arquivo /etc/passwd ou /etc/group você deseja remover esses e configure Cygwin usando o novo modelo de segurança do Windows mapeamentos POSIX.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

configuração define como Cygwin vai buscar o diretório home do usuário /etc/nsswitch.conf do arquivo db_home:. A configuração padrão para db_home: é

db_home: /home/%U

Então, por padrão, Cygwin apenas define a dir casa para /home/$USERNAME. Você pode mudar isso embora para apontar para qualquer outro caminho personalizado que você deseja. Os caracteres curinga suportados são:

  • %u O Cygwin nome de usuário (que de minúsculas u).
  • %U do Windows nome de usuário (que é maiúsculas U).
  • %D domínio do Windows no estilo NetBIOS.
  • %H diretório home do Windows no estilo POSIX. Note-se que, para a definição db_home:, isso só faz sentido certo após a barra que precede, como em db_home: /%H/cygwin
  • %_ desde que o espaço e TAB caracteres são usados ??para separar os esquemas, um espaço no nome do arquivo tem de ser dado como %_ (que é um sublinhado).
  • %% Um personagem por cento.

No lugar de um caminho, você pode especificar um dos quatro esquemas caminho nomeado que são predefinidos.

  1. diretório home windows do usuário é definido para o mesmo diretório que é utilizado como diretório home do Windows, normalmente algo ao longo das linhas de %USERPROFILE% ou C:\Users\$USERNAME. Claro, o diretório do Windows é convertido para POSIX-style por Cygwin.

  2. cygwin AD apenas: diretório home do usuário é definido como o caminho POSIX dada no atributo cygwinHome da classe auxiliar cygwinUser. Veja também a seção chamada “O esquema cygwin” .

  3. unix AD apenas: diretório home do usuário é definido como o caminho POSIX dada no atributo unixHomeDirectory da classe auxiliar posixAccount. Veja também a seção chamada “O esquema unix” .

  4. desc diretório home do usuário é definido como o caminho POSIX dada no lar = "..." configuração XML-alike no atributo de descrição do usuário no SAM ou AD. Veja a seção chamada “O esquema desc” para uma descrição detalhada.

O seguinte fará o diretório home do usuário em Cygwin o mesmo que é usado para o diretório home do Windows.

db_home: windows

Cygwin 1.7.33 ou anterior

Para aqueles que usam Cygwin 1.7.33 ou anterior, atualize para a última versão Cygwin e remover arquivos /etc/passwd e /etc/group usado anteriormente, em seguida, veja os passos acima.

Else, siga estes passos mais velhos abaixo.

Em primeiro lugar, definir uma variável de ambiente Windows para casa que aponta para o seu perfil de usuário:

  1. Abrir Sistema em Controle Panel
  2. No Avançado guia clique Variáveis ??de Ambiente (para o fundo)
  3. Na área Variáveis ??de usuário clique em "Novo ..."
  4. Para Nome da variável entrar HOME
  5. Para o valor variável entrar %USERPROFILE%
  6. Clique em OK em todas as caixas de diálogo abertas para aplicar esta nova configuração

Agora, vamos atualizar o arquivo /etc/passwd Cygwin com a variável %HOME% do Windows que acabamos de criar. logins Shell e logins remotos via ssh contará com /etc/passwd para lhes dizer a localização do caminho $HOME do usuário.

No tipo prompt de comando bash Cygwin o seguinte:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

O interruptor -d diz mkpasswd para incluir usuários de domínio, enquanto -l é usuários da máquina local apenas de saída. Isto é importante se você estiver usando um PC no trabalho, onde as informações do usuário é obtido a partir de um controlador de domínio do Windows.

Agora, você também pode fazer o mesmo para grupos, embora isso não é necessário a menos que você estará usando um computador que faz parte de um domínio do Windows. Cygwin lê informações do grupo dos bancos de dados de conta do Windows, mas você pode adicionar um arquivo /etc/group se sua máquina é muitas vezes desconectado do seu controlador de domínio.

No Cygwin o bash prompt o seguinte:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

Agora, sair Cygwin e começar tudo de novo. Você deve achar que seus pontos PRINCIPAL caminho para o mesmo local que o seu perfil de usuário WINDOWS - ou seja /cygdrive/c/Users/username

cd /home
rm -rf chris
ln -s /cygdrive/z chris

Eu não sou realmente certo se é a solução mais segura, mas é uma solução possível que funciona para mim;)

Eu editei o meu arquivo / etc / passwd diretamente (certificando-se de nada mais seria acessá-lo), e mudou todas as referências a / home para ser / Users (no Windows 7). Descobri que, para que tudo funcione corretamente, eu tive que excluir quaisquer diretórios no diretório / home (ou movê-los para outro local apropriado). Caso contrário, cygwin iria desenvolver uma personalidade dividida, onde, por exemplo, 'festa -l' começaria em / home / Pablo, mas $ HOME seria / Users / Pablo e emacs parece fazer o inverso. Uma vez que eu deletei / home / Pablo, tudo funcionou bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top