Подключение к VPN в Ubuntu

Самый эффективный способ - вызвать ту же самую функцию, которая была зарегистрирована непосредственно с помощью addEventListener.

Вы также можете инициировать поддельное событие с помощью CustomEvent и co.

Наконец, некоторые элементы, такие как <input type="file">, поддерживают метод .click().

0
задан avinash sharma 13 July 2018 в 07:19
поделиться

1 ответ

Ваша проблема вызвана тем, что sudo выводит на поток ошибок. Это происходит:

curlProc1 = Runtime.getRuntime().exec(command1);
  1. Ваша программа запускается sudo
  2. Поскольку sudo по умолчанию работает на базе терминалов, он выдает либо «sudo : no tty присутствует и не указывается запрошенная программа "или" Пароль: "по stderr
while ((outputString1 = curlIn1.readLine()) != null) {
  1. Ваша программа ждет ввода на stdout
  2. Поскольку вы никогда не читаете stderr, sudo никогда не закончится, и, следовательно, sudo никогда не закроет stdout, поэтому ваша программа останется застрявшей

. Один быстрый способ исправить это с помощью конструктора процессов , у него есть полезная опция для объединения как stderr, так и stdout в одном потоке, что означает, что вам нужен только один поток для чтения потока , и сохраняя ваш код простым.

ProcessBuilder pb =
    new ProcessBuilder("sudo", "openvpn", "--config", "/etc/openvpn/configFile");
pb.redirectErrorStream(true);
Process curlProc1 = pb.start();
....

Поскольку есть вероятность, что sudo запросит пароль (, вы можете настроить его, чтобы попросить его вместо того, чтобы давать ошибку ), вы можете указать пароль, записав входной поток процесса после , получив приглашение пароля:

p.getOutputStream().write("correct battery horse staple\n".getBytes(STandardCharsets.UTF_8));
1
ответ дан Ferrybig 17 August 2018 в 13:27
поделиться
  • 1
    Я тоже пытался это решение, но проблема все еще сохраняется, и она находится вокруг цикла while. Если я закрываю цикл, код после этого не выполняется вообще, но команда sudo работает отлично. Код после цикла while выполняется только в том случае, если я добавляю его в цикл while, но затем команда sudo не запускается. Можем ли мы использовать что-то другое вместо readLine ()? Может быть, когда я добавлю код внутри цикла, он не сможет выполнить всю команду sudo, а код после этого запустится немедленно. – avinash sharma 13 July 2018 в 07:44
Другие вопросы по тегам:

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