S SH. net дробится при вызове для запуска удаленной программы opencv - PullRequest
0 голосов
/ 21 апреля 2020

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

все хорошо, используя s sh через cmd. например:

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

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

Теперь я хочу сделать это в c# программе WPF, поэтому я использую пакет S SH. 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();
        }

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

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

1 Ответ

0 голосов
/ 22 апреля 2020

спасибо за комментарий Прикрила, так как ссылка говорит, что каждая функция 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();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...