Mudando o HOME para Cygwin

Mudando o HOME para Cygwin

Estou tentando alterar o diretório inicial do Cygwin em um computador no trabalho. Nossos diretórios iniciais são mapeados para um compartilhamento de rede por padrão. Isso parece causar alguma confusão para o Cygwin, pois ele criou um diretório na minha área de trabalho que segue o mesmo caminho que o compartilhamento de rede seguiria, algum 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

Prefiro ter meu diretório inicial em um diretório de programas local que eu mesmo configurei para gerenciar programas. Assim:

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

A maneira preferida de fazer isso,conforme recomendado pelo cygwin, é fazer uma entrada em /etc/nsswitch.conf. Parece que deveria funcionar:

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

Quaisquer alterações que fiz neste arquivo pareceram ser ignoradas. Reinicio o terminal e, mesmo quando baguncei intencionalmente a sintaxe, não recebo erros. Algumas das opções que tentei e falhei:

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

Reiniciei o processo Cygwin após cada tentativa. Também tentei alterar a db_shellopção /bin/shapenas como experiência, mas o shell não mudou.

Perguntas anteriores no StackExchange sugeriram alterar o /etc/passwdarquivo. Só consegui fazer isso funcionar depois de comentar um bloco de código /etc/profileque estava criando automaticamente o diretório HOME. E então, depois de algum tempo, voltou para a antiga CASA.

Há algo que estou faltando no /etc/nsswitch.confarquivo? Parece que seria uma maneira simples e conveniente de definir configurações personalizadas. As alternativas parecem hacks desatualizados que não são recomendados pelo Cygwin, mas se eu estiver errado, informe-me qual método é 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>

Responder1

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

A página de manual que você refere diz para você usarunix oua /path, não os dois juntos.

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

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

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

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

Quaisquer alterações que fiz neste arquivo pareceram ser ignoradas.

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

  1. Execute o utilitário do Cygwin mkpasswd, que gera /etc/passwde /etc/groupa partir dos bancos de dados de informações do usuário SAM ou AD. Este mecanismo éobsoleto, e só deve ser usado em instalações legadas do Cygwin ou para fins especiais.

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

    Isso não apenas substitui o Cygwin, mas apenas sob certas circunstâncias, e é por isso que énão recomendado.

    Verifique os conjuntos de variáveis ​​de ambiente do usuário e do sistema para ter certeza de que isso não está acontecendo com você.

Perguntas anteriores no StackExchange sugeriram alterar o arquivo /etc/passwd

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

Responder2

Quando tive problemas com um diretório inicial montado remotamente, usei o recurso "mapear unidade de rede", então My Documentsfui mapeado para uma letra de unidade, por exemplo U:\. Então U:\se torna um apelido para My Documents. Aí editei /etc/passwdpara que os ~pontos fossem /cygdrive/ue aí tudo funcionou.

Isso também pode ser feito com diretórios locais, mas o substcomando deve ser usado cmd.exepara criar o alias em vez de "Mapear unidade de rede". Mapear a unidade de rede é permanente, mas substnão é, portanto, um script que faz isso em cada inicialização deve ser colocado na Startpasta do Windows.

informação relacionada