Força o nome do host em letras minúsculas no Windows Subsystem para Linux

2

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

Emcmd.exe,mostracomominúsculas.

Noentanto,noBashdoWindows10,eleéexibidoemmaiúscula,mesmoqueoarquivo/etc/hostnametenhasidoatualizadoparaficaremminúsculas.

    
por Joshua Barnett 10.08.2016 / 14:14

2 respostas

1

A estética disso me incomodou também. Em vez de tentar obter hostname para retornar algo em minúsculas, simplesmente ataquei como bash exibiu o prompt. Eu editei .bashrc (que é específico para a instalação de janelas e, portanto, é improvável que seja reutilizado em um computador diferente) para fazer o seguinte para a variável de prompt PS1

# 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)}\[3[01;32m\]\u@${HN,,}\[3[00m\]:\[3[01;34m\]\w\[3[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 código acima essencialmente codifica o nome em minúsculas da máquina em PS1 quando é criado usando o recurso bash 4.0 que $(A,,) converte a string A em minúscula. Embora não seja uma solução elegante para o problema, isso faz com que o shell se pareça com um shell linux mais normal!

    
por 01.11.2016 / 10:08
1

Editar: Isso já foi implementado ; a capitalização que você definiu nas propriedades do sistema agora será preservada.

Eu estava tendo o mesmo problema. Acontece que você não pode simplesmente alterar o / etc / hostname de dentro do Bash no Ubuntu no Windows (BUW) porque o / 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 com este artigo , é" representado em maiúsculas, onde o algoritmo de tradução de minúsculas para maiúsculas é dependente do conjunto de caracteres OEM. " Quando você renomeia seu computador no Windows por meio de Settings > System > About ou Control Panel > System and Security > System , ele retém a capitalização que você fornece, mas o nome NetBIOS é convertido para todas as maiúsculas. Dito isto, é possível alterar o nome NetBIOS para minúsculas, usando a função de API do Windows SetComputerName . Aqui está um pequeno programa em C ( não-unicode ) que define o nome NetBIOS como 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 não maiúsculo tem efeitos adversos (ele pode quebrar as coisas que dependem de DnsHostnameToComputerName). Por fim, não tenho certeza se é intencional / necessário que o BUW use o nome NetBIOS; Eu perguntei sobre isso no rastreador de problemas do BUW.

Como alternativa, se você não quiser alterar o nome do NetBIOS, poderá criar uma maneira de alterar o nome do host toda vez que o BUW for iniciado usando sudo hostname prophet-w10 (e, em seguida, exec bash para exibi-lo no prompt) .

    
por 11.08.2016 / 09:10