[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: X11 Forwarding example
[Thread Prev] | [Thread Next]
- Subject: Re: X11 Forwarding example
- From: lucky62 <lucky62@xxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 18 Nov 2020 14:33:10 +0100
- To: libssh@xxxxxxxxxx
Hi, I am trying to create x11 example by myself. I have already created example skeleton with these steps: * create the session * set callbacks * set options (host,...) * connect to host * authenticate * create and open channel * send x11-req * send exec request (start X app on server) o here the program is just sleeping for 5 seconds to wait for server response... (in while loop 5000 x 1ms)This is my x11 callback, which is currently doing nothing - just to see that is called:
static ssh_channel x11_callback( ssh_session session, const char * originator_address, int originator_port, void *userdata ) { fprintf( stderr, "x11callback:\n" ); fprintf( stderr, " OrigAddr: |%s|\n", originator_address ); fprintf( stderr, " OrigPort: |%d|\n", originator_port ); return NULL; }But when exec request is sent to the server and success confirmed then nothing happens immediately.
Program is waiting 5 seconds and x11 callback is called then. Why? [2020/11/18 13:33:12.599888, 3] channel_request: Sent a SSH_MSG_CHANNEL_REQUEST exec [2020/11/18 13:33:12.602802, 3] ssh_packet_socket_callback: packet: read type 93 [len=16,padding=6,comp=9,payload=9] [2020/11/18 13:33:12.602862, 3] ssh_packet_process: Dispatching handler for packet type 93 [2020/11/18 13:33:12.602897, 2] channel_rcv_change_window: Adding 2097152 bytes to channel (43:0) (from 0 bytes) [2020/11/18 13:33:12.602921, 3] ssh_packet_socket_callback: Processing 36 bytes left in socket buffer [2020/11/18 13:33:12.602944, 3] ssh_packet_socket_callback: packet: read type 99 [len=16,padding=10,comp=5,payload=5] [2020/11/18 13:33:12.602964, 3] ssh_packet_process: Dispatching handler for packet type 99 [2020/11/18 13:33:12.602985, 3] ssh_packet_channel_success: Received SSH_CHANNEL_SUCCESS on channel (43:0) [2020/11/18 13:33:12.603006, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=44, in_blocks=67 [2020/11/18 13:33:12.603026, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=44, in_blocks=67 [2020/11/18 13:33:*12*.603049, 2]*channel_request: Channel request exec success 5 seconds delay... *[2020/11/18 13:33:*17*.603149, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=44, in_blocks=67 [2020/11/18 13:33:17.603358, 3] ssh_socket_unbuffered_write: Enabling POLLOUT for socket [2020/11/18 13:33:17.603381, 3] packet_send2: packet: wrote [type=96, len=16, padding_size=10, comp=5, payload=5] [2020/11/18 13:33:17.603452, 3] ssh_channel_send_eof: Sent a EOF on client channel (43:0) [2020/11/18 13:33:17.603486, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=44, in_blocks=67 [2020/11/18 13:33:17.603521, 3] packet_send2: packet: wrote [type=97, len=16, padding_size=10, comp=5, payload=5] [2020/11/18 13:33:17.603543, 3] ssh_channel_close: Sent a close on client channel (43:0) [2020/11/18 13:33:17.603578, 3] ssh_packet_socket_callback: packet: read type 90 [len=48,padding=10,comp=37,payload=37] [2020/11/18 13:33:17.603601, 3] ssh_packet_process: Dispatching handler for packet type 90 [2020/11/18 13:33:*17*.603624, 3]*ssh_packet_channel_open: Clients wants to open a x11 channel* x11callback: OrigAddr: |127.0.0.1| OrigPort: |55280| [2020/11/18 13:33:17.603672, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=45, in_blocks=70 [2020/11/18 13:33:17.603703, 3] packet_send2: packet: wrote [type=92, len=32, padding_size=14, comp=17, payload=17] [2020/11/18 13:33:17.603733, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=45, in_blocks=69 [2020/11/18 13:33:17.603772, 3] ssh_socket_unbuffered_write: Enabling POLLOUT for socket [2020/11/18 13:33:17.603796, 3] ssh_packet_need_rekey: packet: [data_rekey_needed=0, out_blocks=46, in_blocks=70 [2020/11/18 13:33:17.603831, 3] packet_send2: packet: wrote [type=1, len=32, padding_size=11, comp=20, payload=20] *How to correctly wait for server response?* Any help is appreciated. thx in advance JanP.S.: My monolithic program is attached. Many things are hardcoded (auth, host, ..) Compiled on my Linux Mint 20 by command: /gcc -o my_x11_client my_x11_client.c -lssh/
//define LIBSSH_STATIC 1 #include <libssh/libssh.h> #include <libssh/callbacks.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #include <string.h> static ssh_channel x11_callback( ssh_session session, const char * originator_address, int originator_port, void *userdata ) { fprintf( stderr, "x11callback:\n" ); fprintf( stderr, " OrigAddr: |%s|\n", originator_address ); fprintf( stderr, " OrigPort: |%d|\n", originator_port ); return NULL; } struct ssh_callbacks_struct cb = { .channel_open_request_x11_function = x11_callback, .userdata = NULL, }; static void do_exit(int i) { // do_cleanup(0); exit(i); } static void usage(void) { fprintf( stderr, "Usage : my_x11_client [login@]hostname [command]\n" " sample client with x11 forwarding - libssh-%s\n" "\n", ssh_version(0) ); exit(0); } int x11_run( ssh_session session, ssh_channel sess_channel ) { int millis = 10000; ssh_channel x11_channel; if ( ssh_channel_request_x11( sess_channel, 0, NULL, NULL, 0 ) ) { fprintf( stderr, "X11 Request failed: %s\n", ssh_get_error(session) ); return -1; } if ( ssh_channel_request_exec( sess_channel, "./X11TestApp" ) ) { fprintf( stderr, "Error executing Xapp: %s\n", ssh_get_error(session)); return -1; } // how to correctly wait for server? while (millis--) { usleep(1000); } } int session_run( ssh_session session ) { // session channel ssh_channel sess_channel; // return code int rc; // set SSH host if ( ssh_options_set( session, SSH_OPTIONS_HOST, "supervisor@hp" ) < 0 ) { return -1; } // connect if ( ssh_connect(session) ) { fprintf( stderr, "Connection failed: %s\n", ssh_get_error(session) ); return -1; } fprintf(stderr, "Connected.\n"); // authenticate rc = ssh_userauth_publickey_auto(session, NULL, NULL); if ( rc != SSH_AUTH_SUCCESS ) { fprintf( stderr, "Authentication failed: %s\n", ssh_get_error(session) ); return -1; } fprintf( stderr, "Authenticated.\n" ); // create a session channel sess_channel = ssh_channel_new(session); if ( sess_channel == NULL ) { fprintf( stderr, "Error creating session channel : %s\n", ssh_get_error(session) ); ssh_disconnect(session); return -1; } fprintf( stderr, "Session Channel created.\n" ); // open the session channel if ( ssh_channel_open_session(sess_channel) ) { fprintf( stderr, "Error opening session channel : %s\n", ssh_get_error(session)); ssh_channel_free(sess_channel); return -1; } fprintf( stderr, "Session Channel open.\n" ); // start X-application rc = x11_run( session, sess_channel ); // free resources ssh_channel_free(sess_channel); ssh_disconnect(session); return rc; } int main( int argc, char **argv ) { // return code int rc; // session variable ssh_session session; // signal( SIGTERM, do_exit ); // create a new session session = ssh_new(); // logging - session must be created in adavance //ssh_set_log_level(SSH_LOG_PROTOCOL); ssh_set_log_level(3); // session callbacks set ssh_callbacks_init(&cb); ssh_set_callbacks( session, &cb ); // start session rc = session_run(session); // free resources ssh_free(session); ssh_finalize(); return rc; }
Re: X11 Forwarding example | Alexander Grotewohl <alex@xxxxxxxxxxx> |
X11 Forwarding example | lucky62 <lucky62@xxxxxxxxxx> |