Как определить из браузера, запущен ли пользователь в сеансе удаленного рабочего стола? - PullRequest
8 голосов
/ 05 августа 2010

Есть ли способы проверить в браузере (например, javascript), работает ли пользователь в сеансе удаленного рабочего стола?


Если пользователь запускает свой браузер внутри удаленного рабочего стола (то есть служб терминалов), я хочу отключить анимацию на веб-сайте.

Если бы это было нативное приложение, а не веб-сайт, я мог бы выполнить эту проверку, используя:

//Native code
isRemoteSession = GetSystemMetrics( SM_REMOTESESSION );

или

//Managed Code:
isRemoteSession = System.Windows.Forms.SystemInformation.TerminalServerSession;

Есть ли аналогичная проверка, которую можно выполнить внутри браузера?

Примечание: Предположим, что для целей данного обсуждения браузер, о котором мы говорим, - это Internet Explorer 8.


Обновление 1: Возможно, что-то в Как вы можете получить имя компьютера клиента службы терминалов из javascript?

Ответы [ 5 ]

10 голосов
/ 13 апреля 2013

Мое решение состоит в том, чтобы использовать CSS @media запросы для минимальных и максимальных значений color медиа-функции . Исходя из эксперимента, кажется, что RDP имеет только 5 бит на цвет, а не полные 8 бит на цвет вашего типичного рабочего стола.

Это решение, конечно, не идеально, потому что вы получите много ложных срабатываний от людей, которые не используют RDP, но у которых просто отображаются дисплеи с низкой глубиной цвета. Тем не менее:

  • Если вы находитесь в относительно контролируемой среде, такой как корпоративная интрасеть, вы можете быть более уверены в том, что «низкая глубина цвета» = «RDP».
  • Многие из визуальных элементов, которые нуждаются в настройке RDP на веб-странице, нуждаются в корректировке именно потому, что из-за низкой глубины цвета (градиенты, затухание, анимация и т. Д.), И так оно и есть на самом деле имеет смысл проверить глубину цвета, а не RDP как таковую .

Вот пример, который работает для меня в последних версиях Firefox и Chrome. Смотрите скриншот ниже.

<!DOCTYPE html>
<html>
    <head>
        <title>Test RDP detection</title>
        <style type="text/css">
            @media all { li.color { display: none; } }
            @media all and (min-color: 1) { li.color.color-depth-1 { display: block; } }
            @media all and (min-color: 2) { li.color.color-depth-2 { display: block; } }
            @media all and (min-color: 3) { li.color.color-depth-3 { display: block; } }
            @media all and (min-color: 4) { li.color.color-depth-4 { display: block; } }
            @media all and (min-color: 5) { li.color.color-depth-5 { display: block; } }
            @media all and (min-color: 6) { li.color.color-depth-6 { display: block; } }
            @media all and (min-color: 7) { li.color.color-depth-7 { display: block; } }
            @media all and (min-color: 8) { li.color.color-depth-8 { display: block; } }

            /* 5 bits per color seems to be the max for RDP */
            @media all and (max-color: 5) {
                .not-rdp { display: none; }
            }
            @media all and (min-color: 6) {
                .rdp-only { display: none; }
            }
        </style>
    </head>
    <body>
        <p>This page uses CSS <tt>@media</tt> queries to detect whether you
            are viewing it over RDP&mdash;heuristically, by looking at the
            color depth of your display.</p>

        <ul>
            <li class="color color-depth-1">Your display is not monochrome!</li>
            <li class="color color-depth-2">Your display has at least 2 bits per color.</li>
            <li class="color color-depth-3">Your display has at least 3 bits per color.</li>
            <li class="color color-depth-4">Your display has at least 4 bits per color.</li>
            <li class="color color-depth-5">Your display has at least 5 bits per color.</li>
            <li class="color color-depth-6">Your display has at least 6 bits per color.</li>
            <li class="color color-depth-7">Your display has at least 7 bits per color.</li>
            <li class="color color-depth-8">Your display has at least 8 bits per color.</li>
        </ul>

        <p>You are <span class="not-rdp">not</span> using RDP.</p>
        <p class="rdp-only">This is only visible over RDP.</p>
    </body>
</html>

screenshot showing test page with and without RDP

Еще один подход в этом направлении заключается в использовании javascript для проверки значения переменной screen.colorDepth.

1 голос
/ 03 сентября 2011

Вероятно, вы можете предоставить код обнаружения через ActiveX или BHO (например, назначить свойство объекту окна в BHO ), если вы используете IE.

В противном случае, если вы используете проигрыватель ActiveX для воспроизведения анимации, проверьте документацию на проигрыватель, чтобы узнать, будет ли он автоматически регулировать частоту кадров на удаленном рабочем столе.

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

Для получения советов по написанию графического приложения, поддерживающего обслуживание терминала, проверьте рассмотрение графических эффектов и общие рекомендации по производительности

0 голосов
/ 26 февраля 2014

Это не должно быть сделано или решено вашей заявкой.На клиенте RDP (например, MS RDC) пользователь может отключить анимации и т. Д. Пользователь также может отключить их на стороне сервера (сервер терминалов или хост RDP)

0 голосов
/ 28 ноября 2010

Я предполагаю, что вы говорите о терминальном сервере конкретной компании, а не о терминальном сервере. Вы не можете подавать анимацию на определенный IP-адрес TS.

0 голосов
/ 02 октября 2010

Возможно, вы можете прочитать переменную окружения SESSIONNAME? Для сеанса консоли это должен быть CONSOLE, а для сеанса RDP - RDP-TCP, за которым следует число.

...