Alterando a HOME para o Cygwin

7

Estou tentando alterar o diretório pessoal do Cygwin em um computador no trabalho. Nossos diretórios base mapeados para um compartilhamento de rede por padrão. Isso parece causar alguma confusão para o Cygwin, pois criou um diretório na minha área de trabalho que segue o mesmo caminho que o compartilhamento de rede, outro prefixo baseado em onde eu abro o cygwin.

Se eu abrir o Cygwin a partir do atalho padrão criado na instalação:

$ echo $HOME
/cygdrive/c/Users/shaun/Desktop/SERVER/USERS:USERS/SHAUN

Se eu abrir o Cygwin no PowerShell:

$ echo $HOME
/usr/bin/SERVER/USERS:USERS/SHAUN

Eu preferiria ter meu diretório home em um diretório local de programas que configurei para gerenciar programas. Assim:

/cygdrive/c/users/shaun/apps/cygwin/home/shaun

A maneira preferida de fazer isso, como recomendado pelo cygwin , é fazer uma entrada em% código%. Isso parece que deve ser feito:

db_home: unix /%H/Apps/cygwin/home/shaun

Todas as alterações que fiz nesse arquivo pareceram ser ignoradas. Eu reinicio o terminal, e mesmo quando intencionalmente bagunço a sintaxe, não recebo erros. Algumas das opções que experimentei e falharam:

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

Eu reiniciei o processo do Cygwin após cada tentativa. Eu também tentei alterar a opção /etc/nsswitch.conf para db_shell apenas como um experimento, mas o shell não mudou.

As perguntas anteriores no StackExchange sugeriram alterar o arquivo /bin/sh , e consegui que isso funcionasse somente depois de comentar um bloco de código em /etc/passwd que criava automaticamente o diretório HOME. E então, depois de algum tempo, voltou para o antigo lar.

Há algo que estou perdendo sobre o arquivo /etc/profile ? Parece que seria uma maneira simples e conveniente de configurar configurações personalizadas. As alternativas parecem ser hacks desatualizados que não são recomendados pelo Cygwin, mas se eu estiver errado, por favor me avise qual método é o preferido.

Meu atual /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>
    
por Shaun 20.07.2015 / 16:16

2 respostas

2

db_home: unix /%H/Apps/cygwin/home/shaun

A página de manual que você faz referência diz para você usar unix ou a /path , não ambos juntos.

A menos que o administrador do AD tenha definido o valor unixHomeDirectory para cada usuário que usa o Cygwin em sua organização, você não deseja usar unix , mas o caminho.

Eu sugeriria uma modificação no que você deu:

db_home: /%H/Apps/cygwin/home/%u

Isso permitirá que a configuração funcione para vários usuários na mesma máquina.

Any changes I have made to this file seemed to be ignored.

Existem duas maneiras de substituir a configuração nsswitch.conf :

  1. Execute o utilitário mkpasswd do Cygwin, que gera /etc/passwd e /etc/group dos bancos de dados de informações do usuário do SAM ou AD. Esse mecanismo é obsoleto e deve ser usado somente em instalações antigas do Cygwin ou para fins especiais.

  2. Defina a variável de ambiente %HOME% no nível do sistema Windows.

    Isso não apenas substitui o Cygwin, mas o faz apenas em determinadas circunstâncias, por isso é não recomendado .

    Verifique os conjuntos de variáveis de ambiente do usuário e do sistema para garantir que isso não aconteça com você.

Past questions in StackExchange have suggested changing the /etc/passwd file

Você deve remover isso e usar o sistema Active Directory do seu site, com /etc/nsswitch.conf controlando como o Cygwin interage com ele.

    
por 09.06.2017 / 08:25
0

Quando tive problemas com um diretório inicial montado remotamente, usei o recurso "map network drive" para que My Documents fosse mapeado para uma letra de unidade, por exemplo, U:\ . Então, U:\ se torna um alias para My Documents . Então eu editei /etc/passwd para que o ~ apontasse para /cygdrive/u e então tudo funcionasse.

Isso também pode ser feito com diretórios locais, mas o comando subst deve ser usado em cmd.exe para criar o alias em vez de "Mapear unidade de rede". A unidade de rede do mapa é permanente, mas subst não é, portanto, um script que o faça em cada inicialização deve ser colocado na pasta Start do Windows.

    
por 07.08.2015 / 08:58