getRuntime (). exec (<command>): <command>не работает - PullRequest
0 голосов
/ 26 марта 2012

В моей программе есть вызовы getRuntime (). Exec (); однако два из них не будут работать:

public static final ROTCW = "xrandr -o left"
public static final CALCW1 = "xinput --set-prop 11 \"Evdev Axis Inversion\" 0 1"
public static final CALCW2 = "xinput --set-prop 11 \"Evdev Axes Swap\" 1";

public void actionPerformed(ActionEvent e)
{       
    try {
        Runtime.getRuntime().exec(ROTCW);
        Runtime.getRuntime().exec(CALCW1);
        Runtime.getRuntime().exec(CALCW2);}
    catch (IOException ioe){ ioe.printStackTrace();}
}});

ROTCW определенно работает (экран вращается по часовой стрелке), но он не калибруется (CALCW). Ввод CALCW вручную на той же вкладке терминала, с которой я запустил программу, работает не , но ввод его в новой вкладке / окне терминала делает работу.

Почему это происходит и что это исправляет?

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Вы можете реализовать логику && непосредственно в Java:

public static final String
    ROTCW = "xrandr -o left",
    CALCW1[] = {"xinput", "--set-prop", "11", "\"Evdev Axis Inversion\"", "0", "1"},
    CALCW2[] = {"xinput", "--set-prop", "11", "\"Evdev Axes Swap\"", "1"};

public void actionPerformed(ActionEvent e)
{       
    try {
        Runtime.getRuntime().exec(ROTCW).waitFor();
        Process p = Runtime.getRuntime().exec(CALCW1);
        p.waitFor();
        if( p.exitValue() != 0 ) Runtime.getRuntime().exec(CALCW2);
    }
    catch (IOException ioe){ ioe.printStackTrace();}
}});
2 голосов
/ 26 марта 2012

Попробуйте добавить оболочку с

 public static final CALCW = "bash -c 'xinput --set-prop 11 \"Evdev Axis Inversion\" 0 1" +
     " && xinput --set-prop 11 \"Evdev Axes Swap\" 1'"

Для пояснения && - это синтаксис для оболочки и просто еще один аргумент для программы.

0 голосов
/ 15 сентября 2016

Это старый вопрос, но я не нашел ответа, поэтому я публикую его.

Вы должны использовать версию массива exec () и без кавычек в соответствующем разделе команды:

CALCW1[] = {"xinput", "set-prop", "11", "Evdev Axis Inversion", "0", "1"}
...