Forçar nome de host em minúsculas no subsistema Windows para Linux

Forçar nome de host em minúsculas no subsistema Windows para Linux

Eu configurei o nome do meu computador para letras minúsculas nas propriedades do sistema.

Propriedades do sistema

Nele cmd.exeaparece em letras minúsculas.

cmd.exe

No entanto, no Windows 10 Bash ele aparece em letras maiúsculas, mesmo que o /etc/hostnamearquivo tenha sido atualizado para letras minúsculas.

insira a descrição da imagem aqui

Responder1

A estética disso também me incomodou. Em vez de tentar retornar hostnamealgo em minúsculas, simplesmente ataquei a forma como basho prompt era exibido. Eu editei .bashrc(que é específico para a instalação do Windows e, portanto, é improvável que seja reutilizado em um computador diferente) para fazer o seguinte na variável promptPS1

# Annoyingly the windows hostname is UPPERCASE which really doesn't look
# good on linux. So for this machine I'm going to grab the hostname and
# hardcode it into the prompt
HN=`hostname`
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@${HN,,}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@${HN,,}:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@${HN,,}: \w\a\]$PS1"
    ;;
*)
    ;;
esac

O texto acima basicamente codifica o nome da máquina em minúsculas PS1quando ela é criada usando o bash 4.0recurso que $(A,,)converte a string A em minúsculas. Embora não seja uma solução elegante para o problema, isso faz com que o shell pareça um shell Linux mais normal!

Responder2

Editar:Isto já foi implementado; a capitalização definida nas propriedades do sistema agora será preservada.

Eu estava tendo o mesmo problema. Acontece que você não pode simplesmente alterar /etc/hostname no Bash no Ubuntu no Windows (BUW) porque /etc/hostname é gerado toda vez que você o inicia. BUW parece usar o nome NetBIOS do seu computador para gerar /etc/hostname que, de acordo comEste artigo, é "representado em letras maiúsculas, onde o algoritmo de tradução de letras minúsculas para maiúsculas depende do conjunto de caracteres OEM." Quando você renomeia seu computador no Windows por meio de Settings > System > Aboutou Control Panel > System and Security > System, ele mantém as letras maiúsculas fornecidas, mas o nome NetBIOS é convertido para letras maiúsculas. Dito isto, é possível alterar o nome NetBIOS para letras minúsculas, usando a função API do WindowsSetComputerName. Aqui está um pequeno programa em C (não Unicode) que define o nome NetBIOS para seu primeiro argumento (requer privilégios de administrador):

#define _WIN32_WINNT 0x0500
#include <sdkddkver.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <stdio.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <New NetBIOS name>\n", argv[0]);
        return 1;
    }

    if (SetComputerNameA(argv[1]) == 0) {
        LPSTR error_message = NULL;
        DWORD error_code = GetLastError();
        FormatMessageA(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            error_code,
            0,
            (LPSTR)&error_message,
            0,
            NULL
        );

        fprintf(stderr, "SetComputerNameA error (%lu)", error_code);
        if (error_message != NULL) {
            fprintf(stderr, ": %s", error_message);
            LocalFree(error_message);
        }
        fprintf(stderr, "\n");
        return 2;
    }
    else {
        printf("NetBIOS name set to \"%s\"\n", argv[1]);
        return 0;
    }
}

Use-o por sua conta e risco, pois não tenho certeza se ter um nome NetBIOS sem letras maiúsculas tem algum efeito adverso (pode quebrar coisas que dependem de DnsHostnameToComputerName). Em última análise, não tenho certeza se é intencional/necessário que o BUW use o nome NetBIOS;Eu perguntei sobre issono rastreador de problemas do BUW.

Alternativamente, se você não quiser alterar o nome NetBIOS, você pode encontrar uma maneira de alterar o nome do host toda vez que o BUW for iniciado sudo hostname prophet-w10(e então exec bashfazê-lo aparecer no prompt).

informação relacionada