Forzar nombre de host en minúsculas en el subsistema de Windows para Linux

Forzar nombre de host en minúsculas en el subsistema de Windows para Linux

Configuré el nombre de mi computadora en minúsculas en las propiedades del sistema.

Propiedades del sistema

En cmd.exeél se muestra en minúsculas.

cmd.exe

Sin embargo, en Windows 10 Bash se muestra en mayúsculas, aunque el /etc/hostnamearchivo se haya actualizado para que esté en minúsculas.

ingrese la descripción de la imagen aquí

Respuesta1

La estética de esto también me molestó. En lugar de intentar hostnamedevolver algo en minúscula, simplemente ataqué cómo bashse muestra el mensaje. Edité .bashrc(que es específico de la instalación de Windows y, por lo tanto, es poco probable que se reutilice en una computadora diferente) para hacer lo siguiente en la variable de solicitudPS1

# 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

Lo anterior esencialmente codifica el nombre en minúsculas de la máquina PS1cuando se crea usando la bash 4.0función que $(A,,)convierte la cadena A a minúsculas. Aunque no es una solución elegante al problema, ¡hace que el shell parezca un shell de Linux más normal!

Respuesta2

Editar:Esto ya se ha implementado; Ahora se conservarán las mayúsculas que configuró en las propiedades del sistema.

Estaba teniendo el mismo problema. Resulta que no puedes simplemente cambiar /etc/hostname desde Bash en Ubuntu en Windows (BUW) porque /etc/hostname se genera cada vez que lo inicias. BUW parece utilizar el nombre NetBIOS de su computadora para generar /etc/hostname que, segúnEste artículo, está "representado en mayúsculas, donde el algoritmo de traducción de minúsculas a mayúsculas depende del juego de caracteres OEM". Cuando cambia el nombre de su computadora en Windows a través de Settings > System > Abouto Control Panel > System and Security > System, conserva las mayúsculas que le dio, pero el nombre NetBIOS se convierte a mayúsculas. Dicho esto, es posible cambiar el nombre NetBIOS para que esté en minúsculas, utilizando la función API de Windows.SetComputerName. Aquí hay un pequeño programa en C (no unicode) que establece el nombre NetBIOS en su primer argumento (requiere privilegios 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;
    }
}

Úselo bajo su propio riesgo, ya que no estoy completamente seguro de si tener un nombre NetBIOS que no esté en mayúsculas tenga algún efecto adverso (podría romper cosas que dependen de DnsHostnameToComputerName). En última instancia, no estoy seguro de si es intencional/necesario que BUW use el nombre NetBIOS;pregunté sobre esoen el rastreador de problemas de BUW.

Alternativamente, si no desea cambiar el nombre de NetBIOS, puede idear alguna forma de cambiar el nombre de host cada vez que se inicia el uso de BUW sudo hostname prophet-w10(y luego exec bashhacer que aparezca en el mensaje).

información relacionada