2012-06-23 6 views
2

В большинстве случаев я использую следующую команду, чтобы использовать одну мышь/клавиатура для нескольких системX11 перенаправление портов с JAVA

ssh [email protected] -X x2x -west -to :0 

Я ищу одно решение в Java, я нашел ganymed и jsch ,

В geanymed я нашел пример, я попытался продлить:

Session sess = conn.openSession();   
sess.requestX11Forwarding("localhost", 6000, null, true); 

Можно ли сделать то же самое (ssh [email protected] -X x2x -west -to :0) с использованием т ganymed или jsch? Если да, то, может ли кто-нибудь предоставить мне минимальный пример?

+1

Обратите внимание, что фактическое значение DISPLAY для использования может отличаться при использовании X11 экспедиторских –

ответ

0

Вы не можете выполнить ту же самую команду, что и исполняемые файлы ssh, но вы можете проанализировать эти параметры & соответствующим образом упорядочить их для каждой используемой библиотеки/фреймворка, чтобы выполнить свою работу.

Для JSch попробуйте http://www.jcraft.com/jsch/examples/X11Forwarding.java. Если ваша виртуальная машина Java работает в режиме без звука, вам потребуется минимальная настройка для разметки кода Swing. здесь идет пример, прямо скопированный из ссылки:

public class X11Forwarding{ 
    public static void main(String[] arg){ 

String xhost="127.0.0.1"; 
int xport=0; 

try{ 
    JSch jsch=new JSch(); 

    String host=null; 
    if(arg.length>0){ 
    host=arg[0]; 
    } 
    else{ 
    host=JOptionPane.showInputDialog("Enter [email protected]", 
            System.getProperty("user.name")+ 
            "@localhost"); 
    } 
    String user=host.substring(0, host.indexOf('@')); 
    host=host.substring(host.indexOf('@')+1); 

    Session session=jsch.getSession(user, host, 22); 

    String display=JOptionPane.showInputDialog("Please enter display name", 
        xhost+":"+xport); 
    xhost=display.substring(0, display.indexOf(':')); 
    xport=Integer.parseInt(display.substring(display.indexOf(':')+1)); 

    session.setX11Host(xhost); 
    session.setX11Port(xport+6000); 

    // username and password will be given via UserInfo interface. 
    UserInfo ui=new MyUserInfo(); 
    session.setUserInfo(ui); 
    session.connect(); 

    Channel channel=session.openChannel("shell"); 

    channel.setXForwarding(true); 

    channel.setInputStream(System.in); 
    channel.setOutputStream(System.out); 

    channel.connect(); 
} 
catch(Exception e){ 
    System.out.println(e); 
} 
} 

public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{ 
public String getPassword(){ return passwd; } 
public boolean promptYesNo(String str){ 
    Object[] options={ "yes", "no" }; 
    int foo=JOptionPane.showOptionDialog(null, 
     str, 
     "Warning", 
     JOptionPane.DEFAULT_OPTION, 
     JOptionPane.WARNING_MESSAGE, 
     null, options, options[0]); 
    return foo==0; 
} 

String passwd; 
JTextField passwordField=(JTextField)new JPasswordField(20); 

public String getPassphrase(){ return null; } 
public boolean promptPassphrase(String message){ return true; } 
public boolean promptPassword(String message){ 
    Object[] ob={passwordField}; 
    int result= 
    JOptionPane.showConfirmDialog(null, ob, message, 
       JOptionPane.OK_CANCEL_OPTION); 
    if(result==JOptionPane.OK_OPTION){ 
passwd=passwordField.getText(); 
return true; 
    } 
    else{ return false; } 
} 
public void showMessage(String message){ 
    JOptionPane.showMessageDialog(null, message); 
} 
final GridBagConstraints gbc = 
    new GridBagConstraints(0,0,1,1,1,1, 
         GridBagConstraints.NORTHWEST, 
         GridBagConstraints.NONE, 
         new Insets(0,0,0,0),0,0); 
private Container panel; 
public String[] promptKeyboardInteractive(String destination, 
              String name, 
              String instruction, 
              String[] prompt, 
              boolean[] echo){ 
    panel = new JPanel(); 
    panel.setLayout(new GridBagLayout()); 

    gbc.weightx = 1.0; 
    gbc.gridwidth = GridBagConstraints.REMAINDER; 
    gbc.gridx = 0; 
    panel.add(new JLabel(instruction), gbc); 
    gbc.gridy++; 

    gbc.gridwidth = GridBagConstraints.RELATIVE; 

    JTextField[] texts=new JTextField[prompt.length]; 
    for(int i=0; i<prompt.length; i++){ 
    gbc.fill = GridBagConstraints.NONE; 
    gbc.gridx = 0; 
    gbc.weightx = 1; 
    panel.add(new JLabel(prompt[i]),gbc); 

    gbc.gridx = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.weighty = 1; 
    if(echo[i]){ 
     texts[i]=new JTextField(20); 
    } 
    else{ 
     texts[i]=new JPasswordField(20); 
    } 
    panel.add(texts[i], gbc); 
    gbc.gridy++; 
    } 

    if(JOptionPane.showConfirmDialog(null, panel, 
            destination+": "+name, 
            JOptionPane.OK_CANCEL_OPTION, 
            JOptionPane.QUESTION_MESSAGE) 
    ==JOptionPane.OK_OPTION){ 
    String[] response=new String[prompt.length]; 
    for(int i=0; i<prompt.length; i++){ 
     response[i]=texts[i].getText(); 
    } 
return response; 
    } 
    else{ 
    return null; // cancel 
    } 
} 
} 
} 
+1

Можете ли вы предоставить мне простой пример мольбы, используя JSch. –

+0

Интересно, почему вы не пытаетесь привести пример на http://www.jcraft.com/jsch/examples/X11Forwarding.java. –

Смежные вопросы