Настройка xdmcp для удаленного рабочего стола с принудительным использованием udp v4

Вы не сможете сделать это легко, не обращаясь к более высокому уровню скриптового языка. Если бы я делал это, я бы использовал PHP и сделал что-то вроде

$values) {
    $buffer = "";
    $buffer .= $key.' ';
    foreach(array_keys($values) as $v) {
        buffer .= $v.' ';
    }
    $buffer .= "\n";
    fwrite($outfile, $buffer);
}
fclose($infile);
fclose($outfile);
?>

-121--243229-

Это хороший вопрос, но есть много способов добраться до возможного решения (и я не знаю всех из них). Прежде всего, точная формулировка, которую вы ищете, это кернинг , который является регулировкой космоса между символами шрифта.

  1. Возможно, это приложение специфично, и вы увидите только слишком близкое кернинг между этими символами в этом конкретном приложении, я предлагаю попробовать написать «YouTube» в редакторе слов, и отметить шрифт, который работает для вас. Некоторые приложения позволяют изменять или отключать кернинг (иногда они называют его «космосом между буквами» или буквенным пробелом). Можно также попробовать изменить шрифт в самом приложении, и в качестве последнего средства приложения можно искать/искать файлы config для изменения.
  2. Если проблема не специфична для конкретного приложения, скорее всего, это xfce4 (или ваша среда рабочего стола) отказ , если это так, то самым простым выходом будет просто заменить шрифт DE на шрифт, который не имеет кернинга (именно здесь появляется этот шрифт редактора слов, который вам понравился). Для xfce4 меню внешнего вида используется для изменения общесистемного шрифта . Отключение/изменение кернинга также возможно в некоторых DEs.
  3. Если буквы перекрываются, это может быть отрицательным кернингом, но это также может быть проблемы с пакетом шрифтов .

-121--111331-

Вы можете рассмотреть технологии esata или sas, которые могут быть лучше, чем форматы USB3 и USB c для больших переводов файлов.

0
03.06.2018, 14:22
1 ответ

Creo haber encontrado la respuesta a mi pregunta. He descargado el código fuente de gdm3 y he localizado dónde está configurado el socket para xdmcp.

static gboolean
open_port (GdmXdmcpDisplayFactory *factory)
{
        struct sockaddr_storage serv_sa = { 0 };

        g_debug ("GdmXdmcpDisplayFactory: Start up on host %s, port %d",
                 factory->priv->hostname ? factory->priv->hostname : "(null)",
                 factory->priv->port);

        /* Open socket for communications */
#ifdef ENABLE_IPV6
        factory->priv->socket_fd = do_bind (factory->priv->port, AF_INET6, &serv_sa);
        if (factory->priv->socket_fd < 0)
#endif
                factory->priv->socket_fd = do_bind (factory->priv->port, AF_INET, &serv_sa);

        if G_UNLIKELY (factory->priv->socket_fd < 0) {
                g_warning (_("Could not create socket!"));
                return FALSE;
        }

        fd_set_close_on_exec (factory->priv->socket_fd);

        if (factory->priv->use_multicast) {
                setup_multicast (factory);
        }

        return TRUE;
}

Aquí se puede ver que si el paquete se creó para admitir IP6 y la operación de vinculación finaliza correctamente, el socket solo escuchará UDP6 y no UDP4.

La solución debe ser reconstruir el paquete sin el soporte de IP6, o modificar el código fuente para que se incluya un nuevo parámetro para habilitar/deshabilitar IP6 desde el archivo /etc/gdm3/daemon.conf.


Se actualizó más información de los comentarios.

static int
create_socket (struct addrinfo *ai)
{
        int sock;

        sock = socket (ai->ai_family, ai->ai_socktype, ai->ai_protocol);
        if (sock < 0) {
                g_warning ("socket: %s", g_strerror (errno));
                return sock;
        }

#if defined(ENABLE_IPV6) && defined(IPV6_V6ONLY)
    if (ai->ai_family == AF_INET6) {
        int zero = 0;
        if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero)) < 0)
            g_warning("setsockopt(IPV6_V6ONLY): %s", g_strerror(errno));
    }
#endif

        if (bind (sock, ai->ai_addr, ai->ai_addrlen) < 0) {
                g_warning ("bind: %s", g_strerror (errno));
                close (sock);
                return -1;
        }

        return sock;
}

Y podemos ver lo siguiente en el sistema de archivos proc:

$ cat /proc/sys/net/ipv6/bindv6only 
0

Por lo tanto, parece que no se realiza ningún enlace dual. Debería ser porque IPV6 _V6ONLY está definido.


Después de reconstruir el paquete sin soporte ip6:

udp        0      0 0.0.0.0:177             0.0.0.0:*                           - 
1
28.01.2020, 02:43

Теги

Похожие вопросы