SSH.net раздавлен при вызове для запуска удаленной программы opencv

У меня есть программа opencv в качестве сервера для отправки потока изображений с камеры. Теперь мне нужно сделать программу С# для удаленного открытия программы opencv.

все хорошо, используя ssh через cmd. подобно:

ssh myname@ip
export DISPLAY=":0"
~/home/MyName/MyOpencvProgram

и я вижу всплывающее окно imshow на моем серверном компьютере.

Теперь я хочу сделать это в программе С# WPF, поэтому я использую пакет SSH.NET:

public void TrySomeSSh()
        {
            ConnectionInfo conInfo = new ConnectionInfo(ip, _port, _username, new AuthenticationMethod[]{
    new PasswordAuthenticationMethod(_username,_password)});
            SshClient sshClient = new SshClient(conInfo);
            sshClient.Connect();
            if (sshClient.IsConnected)
            {
                SshCommand output1;
                string line1 = "export DISPLAY=\":0\"";
                output1 = sshClient.RunCommand(line1);
                Console.WriteLine(output1.Execute());
                Console.WriteLine(line1);
                string line = "/home/MyName/MyOpencvProgram";
                Console.WriteLine(line);
                var output2 = sshClient.RunCommand(line);
                Console.WriteLine(output2.Execute());
            }
            else
            {
                Console.WriteLine("not connected");
            }
            sshClient.Disconnect();
            sshClient.Dispose();
        }

из output.Execute() я вижу, что программа работает. Однако он всегда останавливался при встрече с какой-либо функцией графического интерфейса, такой как namedwindow() , imshow() или waitKey() . Все они работают нормально. при использовании ssh через cmd, и я думаю, что команды export DISPLAY=":0" достаточно, чтобы решить эту проблему. Но это все равно остановилось.

Что мне теперь делать?


person ggininder    schedule 21.04.2020    source источник
comment
См. раздел Запуск и выполнение нескольких зависимых команд SSH с помощью C#.   -  person Martin Prikryl    schedule 21.04.2020


Ответы (1)


спасибо за комментарий Prikryl, поскольку в ссылке говорится, что каждая функция RunCommand() работает в своей собственной оболочке, RunCommand() не запоминает переменную, которую мы даем. Итак, мы должны собрать команду

подобно:

public void TrySomeSSh()
        {
            ConnectionInfo conInfo = new ConnectionInfo(ip, _port, _username, new AuthenticationMethod[]{
    new PasswordAuthenticationMethod(_username,_password)});
            SshClient sshClient = new SshClient(conInfo);
            sshClient.Connect();
            if (sshClient.IsConnected)
            {
                SshCommand output1;
                 output1 = sshClient.RunCommand("export DISPLAY=\"127.0.0.1:10.0\" ; /home/MyName/MyOpencvProgram ");
              Console.WriteLine(output1.CommandText);
              Console.WriteLine(output1.Execute());

            }
            else
            {
                Console.WriteLine("not connected");
            }
            sshClient.Disconnect();
            sshClient.Dispose();
        }
person ggininder    schedule 22.04.2020