Using ATI Remote Redhat 9.0

Using ATI Remote Redhat 9.0

Post by Matt » Sat, 28 Jun 2003 12:20:43



I am trying to install the drivers to use the ATI remote wonder (just
the remote, no cards). When I go to install the driver and type 'make'
or 'make test', I get the output that is shown below. I don't know how
to get the driver to work. Any suggestions would be great. O yea, the
driver is the gatos driver (pretty much the only driver I can find for
the remote that works with linux). Thanks!

gcc -m486 -O2 -Wall -Wstrict-prototypes -pipe -fno-strict-aliasing
-fno-common -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux/include -c
ati_remote.c
`-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.
ati_remote.c:63: field `dev' has incomplete type
ati_remote.c:64: field `irq' has incomplete type
ati_remote.c:64: field `out' has incomplete type
ati_remote.c:65: parse error before "wait_queue_head_t"
ati_remote.c:65: warning: no semicolon at end of struct or union
ati_remote.c:66: warning: type defaults to `int' in declaration of
`dr'
ati_remote.c:66: warning: data definition has no type or storage class
ati_remote.c:68: parse error before '}' token
ati_remote.c: In function `send_packet':
ati_remote.c:166: warning: implicit declaration of function
`DECLARE_WAITQUEUE'
ati_remote.c:166: `wait' undeclared (first use in this function)
ati_remote.c:166: (Each undeclared identifier is reported only once
ati_remote.c:166: for each function it appears in.)
ati_remote.c:166: `current' undeclared (first use in this function)
ati_remote.c:167: `HZ' undeclared (first use in this function)
ati_remote.c:169: warning: implicit declaration of function `memcpy'
ati_remote.c:169: dereferencing pointer to incomplete type
ati_remote.c:170: dereferencing pointer to incomplete type
ati_remote.c:171: dereferencing pointer to incomplete type
ati_remote.c:172: dereferencing pointer to incomplete type
ati_remote.c:172: dereferencing pointer to incomplete type
ati_remote.c:174: warning: implicit declaration of function
`set_current_state'
ati_remote.c:174: `TASK_INTERRUPTIBLE' undeclared (first use in this
function)
ati_remote.c:175: warning: implicit declaration of function
`add_wait_queue'
ati_remote.c:175: dereferencing pointer to incomplete type
ati_remote.c:177: warning: implicit declaration of function
`usb_submit_urb'
ati_remote.c:177: dereferencing pointer to incomplete type
ati_remote.c:178: `TASK_RUNNING' undeclared (first use in this
function)
ati_remote.c:179: warning: implicit declaration of function
`remove_wait_queue'
ati_remote.c:179: dereferencing pointer to incomplete type
ati_remote.c:183: dereferencing pointer to incomplete type
ati_remote.c:183: `EINPROGRESS' undeclared (first use in this
function)
ati_remote.c:184: warning: implicit declaration of function
`schedule_timeout'
ati_remote.c:187: dereferencing pointer to incomplete type
ati_remote.c:190: warning: implicit declaration of function
`usb_unlink_urb'
ati_remote.c:190: dereferencing pointer to incomplete type
ati_remote.c: In function `ati_remote_irq':
ati_remote.c:195: dereferencing pointer to incomplete type
ati_remote.c:196: dereferencing pointer to incomplete type
ati_remote.c:197: dereferencing pointer to incomplete type
ati_remote.c:202: dereferencing pointer to incomplete type
ati_remote.c:204: dereferencing pointer to incomplete type
ati_remote.c:206: warning: implicit declaration of function `printk'
ati_remote.c:208: dereferencing pointer to incomplete type
ati_remote.c:211: dereferencing pointer to incomplete type
ati_remote.c:216: dereferencing pointer to incomplete type
ati_remote.c:220: dereferencing pointer to incomplete type
ati_remote.c:220: dereferencing pointer to incomplete type
ati_remote.c:220: dereferencing pointer to incomplete type
ati_remote.c:221: dereferencing pointer to incomplete type
ati_remote.c:221: `HZ' undeclared (first use in this function)
ati_remote.c:221: `jiffies' undeclared (first use in this function)
ati_remote.c:223: dereferencing pointer to incomplete type
ati_remote.c:225: dereferencing pointer to incomplete type
ati_remote.c:227: dereferencing pointer to incomplete type
ati_remote.c:229: dereferencing pointer to incomplete type
ati_remote.c:231: dereferencing pointer to incomplete type
ati_remote.c:238: warning: implicit declaration of function
`input_event'
ati_remote.c:248: warning: implicit declaration of function
`input_report_rel'
ati_remote.c:264: dereferencing pointer to incomplete type
ati_remote.c:264: dereferencing pointer to incomplete type
ati_remote.c:264: dereferencing pointer to incomplete type
ati_remote.c:283: dereferencing pointer to incomplete type
ati_remote.c:283: dereferencing pointer to incomplete type
ati_remote.c:284: dereferencing pointer to incomplete type
ati_remote.c:285: dereferencing pointer to incomplete type
ati_remote.c:286: dereferencing pointer to incomplete type
ati_remote.c: In function `ati_remote_open':
ati_remote.c:292: dereferencing pointer to incomplete type
ati_remote.c:296: dereferencing pointer to incomplete type
ati_remote.c:299: dereferencing pointer to incomplete type
ati_remote.c:299: dereferencing pointer to incomplete type
ati_remote.c:300: dereferencing pointer to incomplete type
ati_remote.c:301: `EIO' undeclared (first use in this function)
ati_remote.c: In function `ati_remote_close':
ati_remote.c:309: dereferencing pointer to incomplete type
ati_remote.c:311: dereferencing pointer to incomplete type
ati_remote.c:312: dereferencing pointer to incomplete type
ati_remote.c: In function `ati_remote_usb_out':
ati_remote.c:317: dereferencing pointer to incomplete type
ati_remote.c:318: dereferencing pointer to incomplete type
ati_remote.c:319: warning: implicit declaration of function
`waitqueue_active'
ati_remote.c:319: dereferencing pointer to incomplete type
ati_remote.c:320: warning: implicit declaration of function `wake_up'
ati_remote.c:320: dereferencing pointer to incomplete type
ati_remote.c: At top level:
ati_remote.c:324: warning: `struct usb_device_id' declared inside
parameter list
ati_remote.c:324: warning: its scope is only this definition or
declaration, which is probably not what you want
ati_remote.c: In function `ati_remote_probe':
ati_remote.c:335: dereferencing pointer to incomplete type
ati_remote.c:336: dereferencing pointer to incomplete type
ati_remote.c:336: dereferencing pointer to incomplete type
ati_remote.c:338: dereferencing pointer to incomplete type
ati_remote.c:338: `NULL' undeclared (first use in this function)
ati_remote.c:341: dereferencing pointer to incomplete type
ati_remote.c:342: dereferencing pointer to incomplete type
ati_remote.c:343: dereferencing pointer to incomplete type
ati_remote.c:344: dereferencing pointer to incomplete type
ati_remote.c:346: warning: implicit declaration of function
`usb_rcvintpipe'
ati_remote.c:346: dereferencing pointer to incomplete type
ati_remote.c:347: warning: implicit declaration of function
`usb_maxpacket'
ati_remote.c:347: warning: implicit declaration of function
`usb_pipeout'
ati_remote.c:348: dereferencing pointer to incomplete type
ati_remote.c:350: warning: implicit declaration of function
`usb_set_idle'
ati_remote.c:350: dereferencing pointer to incomplete type
ati_remote.c:352: warning: implicit declaration of function `kmalloc'
ati_remote.c:352: sizeof applied to an incomplete type
ati_remote.c:352: `GFP_KERNEL' undeclared (first use in this function)
ati_remote.c:352: warning: assignment makes pointer from integer
without a cast
ati_remote.c:353: warning: implicit declaration of function `memset'
ati_remote.c:353: sizeof applied to an incomplete type
ati_remote.c:355: dereferencing pointer to incomplete type
ati_remote.c:357: warning: assignment makes pointer from integer
without a cast
ati_remote.c:358: warning: implicit declaration of function `kfree'
ati_remote.c:362: dereferencing pointer to incomplete type
ati_remote.c:363: warning: implicit declaration of function
`usb_string'
ati_remote.c:363: dereferencing pointer to incomplete type
ati_remote.c:364: warning: implicit declaration of function `strcat'
ati_remote.c:364: dereferencing pointer to incomplete type
ati_remote.c:365: dereferencing pointer to incomplete type
ati_remote.c:366: dereferencing pointer to incomplete type
ati_remote.c:367: warning: implicit declaration of function `sprintf'
ati_remote.c:367: dereferencing pointer to incomplete type
ati_remote.c:367: dereferencing pointer to incomplete type
ati_remote.c:369: warning: implicit declaration of function `strlen'
ati_remote.c:369: dereferencing pointer to incomplete type
ati_remote.c:370: dereferencing pointer to incomplete type
ati_remote.c:371: dereferencing pointer to incomplete type
ati_remote.c:371: dereferencing pointer to incomplete type
ati_remote.c:378: warning: implicit declaration of function `set_bit'
ati_remote.c:378: dereferencing pointer to incomplete type
ati_remote.c:379: warning: implicit declaration of function
`clear_bit'
ati_remote.c:379: dereferencing pointer to incomplete type
ati_remote.c:380: dereferencing pointer to incomplete type
ati_remote.c:382: dereferencing pointer to incomplete type
ati_remote.c:382: warning: implicit declaration of function `BIT'
ati_remote.c:383: dereferencing pointer to incomplete type
ati_remote.c:383: warning: implicit declaration of function `LONG'
ati_remote.c:384: dereferencing pointer to incomplete type
ati_remote.c:385: dereferencing pointer to incomplete type
ati_remote.c:386: dereferencing pointer to incomplete type
ati_remote.c:389: dereferencing pointer to incomplete type
ati_remote.c:390: dereferencing pointer to incomplete type
ati_remote.c:391: dereferencing pointer to incomplete type
ati_remote.c:393: dereferencing pointer to incomplete type
ati_remote.c:393: dereferencing pointer to incomplete type
ati_remote.c:394: dereferencing pointer to incomplete type
ati_remote.c:394: dereferencing pointer to incomplete type
ati_remote.c:395: dereferencing pointer to incomplete type
ati_remote.c:396: dereferencing pointer to incomplete type
ati_remote.c:396: dereferencing pointer to ...

read more »

 
 
 

Using ATI Remote Redhat 9.0

Post by Gary Desrosier » Sat, 28 Jun 2003 14:32:15


Worked for me. You may want to get the latest from the cvs code tree:

cvs -z3
    -d:pserver:anonym...@cvs.sourceforge.net:/cvsroot/gatos
    co ati_remote

or is it possible that you don't have the kernel source installed?
check /usr/src/linux if it's empty, that's your problem.

Gary

Matt S wrote:
> I am trying to install the drivers to use the ATI remote wonder (just
> the remote, no cards). When I go to install the driver and type 'make'
> or 'make test', I get the output that is shown below. I don't know how
> to get the driver to work. Any suggestions would be great. O yea, the
> driver is the gatos driver (pretty much the only driver I can find for
> the remote that works with linux). Thanks!

> gcc -m486 -O2 -Wall -Wstrict-prototypes -pipe -fno-strict-aliasing
> -fno-common -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux/include -c
> ati_remote.c
> `-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.
> ati_remote.c:63: field `dev' has incomplete type
> ati_remote.c:64: field `irq' has incomplete type
> ati_remote.c:64: field `out' has incomplete type
> ati_remote.c:65: parse error before "wait_queue_head_t"
> ati_remote.c:65: warning: no semicolon at end of struct or union
> ati_remote.c:66: warning: type defaults to `int' in declaration of
> `dr'
> ati_remote.c:66: warning: data definition has no type or storage class
> ati_remote.c:68: parse error before '}' token
> ati_remote.c: In function `send_packet':
> ati_remote.c:166: warning: implicit declaration of function
> `DECLARE_WAITQUEUE'
> ati_remote.c:166: `wait' undeclared (first use in this function)
> ati_remote.c:166: (Each undeclared identifier is reported only once
> ati_remote.c:166: for each function it appears in.)
> ati_remote.c:166: `current' undeclared (first use in this function)
> ati_remote.c:167: `HZ' undeclared (first use in this function)
> ati_remote.c:169: warning: implicit declaration of function `memcpy'
> ati_remote.c:169: dereferencing pointer to incomplete type
> ati_remote.c:170: dereferencing pointer to incomplete type
> ati_remote.c:171: dereferencing pointer to incomplete type
> ati_remote.c:172: dereferencing pointer to incomplete type
> ati_remote.c:172: dereferencing pointer to incomplete type
> ati_remote.c:174: warning: implicit declaration of function
> `set_current_state'
> ati_remote.c:174: `TASK_INTERRUPTIBLE' undeclared (first use in this
> function)
> ati_remote.c:175: warning: implicit declaration of function
> `add_wait_queue'
> ati_remote.c:175: dereferencing pointer to incomplete type
> ati_remote.c:177: warning: implicit declaration of function
> `usb_submit_urb'
> ati_remote.c:177: dereferencing pointer to incomplete type
> ati_remote.c:178: `TASK_RUNNING' undeclared (first use in this
> function)
> ati_remote.c:179: warning: implicit declaration of function
> `remove_wait_queue'
> ati_remote.c:179: dereferencing pointer to incomplete type
> ati_remote.c:183: dereferencing pointer to incomplete type
> ati_remote.c:183: `EINPROGRESS' undeclared (first use in this
> function)
> ati_remote.c:184: warning: implicit declaration of function
> `schedule_timeout'
> ati_remote.c:187: dereferencing pointer to incomplete type
> ati_remote.c:190: warning: implicit declaration of function
> `usb_unlink_urb'
> ati_remote.c:190: dereferencing pointer to incomplete type
> ati_remote.c: In function `ati_remote_irq':
> ati_remote.c:195: dereferencing pointer to incomplete type
> ati_remote.c:196: dereferencing pointer to incomplete type
> ati_remote.c:197: dereferencing pointer to incomplete type
> ati_remote.c:202: dereferencing pointer to incomplete type
> ati_remote.c:204: dereferencing pointer to incomplete type
> ati_remote.c:206: warning: implicit declaration of function `printk'
> ati_remote.c:208: dereferencing pointer to incomplete type
> ati_remote.c:211: dereferencing pointer to incomplete type
> ati_remote.c:216: dereferencing pointer to incomplete type
> ati_remote.c:220: dereferencing pointer to incomplete type
> ati_remote.c:220: dereferencing pointer to incomplete type
> ati_remote.c:220: dereferencing pointer to incomplete type
> ati_remote.c:221: dereferencing pointer to incomplete type
> ati_remote.c:221: `HZ' undeclared (first use in this function)
> ati_remote.c:221: `jiffies' undeclared (first use in this function)
> ati_remote.c:223: dereferencing pointer to incomplete type
> ati_remote.c:225: dereferencing pointer to incomplete type
> ati_remote.c:227: dereferencing pointer to incomplete type
> ati_remote.c:229: dereferencing pointer to incomplete type
> ati_remote.c:231: dereferencing pointer to incomplete type
> ati_remote.c:238: warning: implicit declaration of function
> `input_event'
> ati_remote.c:248: warning: implicit declaration of function
> `input_report_rel'
> ati_remote.c:264: dereferencing pointer to incomplete type
> ati_remote.c:264: dereferencing pointer to incomplete type
> ati_remote.c:264: dereferencing pointer to incomplete type
> ati_remote.c:283: dereferencing pointer to incomplete type
> ati_remote.c:283: dereferencing pointer to incomplete type
> ati_remote.c:284: dereferencing pointer to incomplete type
> ati_remote.c:285: dereferencing pointer to incomplete type
> ati_remote.c:286: dereferencing pointer to incomplete type
> ati_remote.c: In function `ati_remote_open':
> ati_remote.c:292: dereferencing pointer to incomplete type
> ati_remote.c:296: dereferencing pointer to incomplete type
> ati_remote.c:299: dereferencing pointer to incomplete type
> ati_remote.c:299: dereferencing pointer to incomplete type
> ati_remote.c:300: dereferencing pointer to incomplete type
> ati_remote.c:301: `EIO' undeclared (first use in this function)
> ati_remote.c: In function `ati_remote_close':
> ati_remote.c:309: dereferencing pointer to incomplete type
> ati_remote.c:311: dereferencing pointer to incomplete type
> ati_remote.c:312: dereferencing pointer to incomplete type
> ati_remote.c: In function `ati_remote_usb_out':
> ati_remote.c:317: dereferencing pointer to incomplete type
> ati_remote.c:318: dereferencing pointer to incomplete type
> ati_remote.c:319: warning: implicit declaration of function
> `waitqueue_active'
> ati_remote.c:319: dereferencing pointer to incomplete type
> ati_remote.c:320: warning: implicit declaration of function `wake_up'
> ati_remote.c:320: dereferencing pointer to incomplete type
> ati_remote.c: At top level:
> ati_remote.c:324: warning: `struct usb_device_id' declared inside
> parameter list
> ati_remote.c:324: warning: its scope is only this definition or
> declaration, which is probably not what you want
> ati_remote.c: In function `ati_remote_probe':
> ati_remote.c:335: dereferencing pointer to incomplete type
> ati_remote.c:336: dereferencing pointer to incomplete type
> ati_remote.c:336: dereferencing pointer to incomplete type
> ati_remote.c:338: dereferencing pointer to incomplete type
> ati_remote.c:338: `NULL' undeclared (first use in this function)
> ati_remote.c:341: dereferencing pointer to incomplete type
> ati_remote.c:342: dereferencing pointer to incomplete type
> ati_remote.c:343: dereferencing pointer to incomplete type
> ati_remote.c:344: dereferencing pointer to incomplete type
> ati_remote.c:346: warning: implicit declaration of function
> `usb_rcvintpipe'
> ati_remote.c:346: dereferencing pointer to incomplete type
> ati_remote.c:347: warning: implicit declaration of function
> `usb_maxpacket'
> ati_remote.c:347: warning: implicit declaration of function
> `usb_pipeout'
> ati_remote.c:348: dereferencing pointer to incomplete type
> ati_remote.c:350: warning: implicit declaration of function
> `usb_set_idle'
> ati_remote.c:350: dereferencing pointer to incomplete type
> ati_remote.c:352: warning: implicit declaration of function `kmalloc'
> ati_remote.c:352: sizeof applied to an incomplete type
> ati_remote.c:352: `GFP_KERNEL' undeclared (first use in this function)
> ati_remote.c:352: warning: assignment makes pointer from integer
> without a cast
> ati_remote.c:353: warning: implicit declaration of function `memset'
> ati_remote.c:353: sizeof applied to an incomplete type
> ati_remote.c:355: dereferencing pointer to incomplete type
> ati_remote.c:357: warning: assignment makes pointer from integer
> without a cast
> ati_remote.c:358: warning: implicit declaration of function `kfree'
> ati_remote.c:362: dereferencing pointer to incomplete type
> ati_remote.c:363: warning: implicit declaration of function
> `usb_string'
> ati_remote.c:363: dereferencing pointer to incomplete type
> ati_remote.c:364: warning: implicit declaration of function `strcat'
> ati_remote.c:364: dereferencing pointer to incomplete type
> ati_remote.c:365: dereferencing pointer to incomplete type
> ati_remote.c:366: dereferencing pointer to incomplete type
> ati_remote.c:367: warning: implicit declaration of function `sprintf'
> ati_remote.c:367: dereferencing pointer to incomplete type
> ati_remote.c:367: dereferencing pointer to incomplete type
> ati_remote.c:369: warning: implicit declaration of function `strlen'
> ati_remote.c:369: dereferencing pointer to incomplete type
> ati_remote.c:370: dereferencing pointer to incomplete type
> ati_remote.c:371: dereferencing pointer to incomplete type
> ati_remote.c:371: dereferencing pointer to incomplete type
> ati_remote.c:378: warning: implicit declaration of function `set_bit'
> ati_remote.c:378: dereferencing pointer to incomplete type
> ati_remote.c:379: warning: implicit declaration of function
> `clear_bit'
> ati_remote.c:379: dereferencing pointer to incomplete type
> ati_remote.c:380: dereferencing pointer to incomplete type
> ati_remote.c:382: dereferencing pointer to incomplete type
> ati_remote.c:382: warning: implicit declaration of function `BIT'
> ati_remote.c:383: dereferencing pointer to incomplete type
> ati_remote.c:383: warning: implicit declaration of function `LONG'
> ati_remote.c:384: dereferencing pointer to incomplete type
> ati_remote.c:385: dereferencing pointer to

...

read more »

 
 
 

Using ATI Remote Redhat 9.0

Post by mjt » Sun, 29 Jun 2003 14:13:56



> I am trying to install the drivers to use the ATI remote wonder (just
> the remote, no cards). When I go to install the driver and type 'make'
> or 'make test', I get the output that is shown below. I don't know how
> to get the driver to work.

.... in the future, wait until someone asks for log output - 260 lines
is a bit excessive to post without request.

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Michael J. Tobler: motorcyclist, surfer,  #    Black holes result
 skydiver, and author: "Inside Linux",     #   when God divides the  
 "C++ HowTo", "C++ Unleashed"              #     universe by zero

 
 
 

1. ATI TV Wonder VE and RedHat 9.0

I've been struggling with this for the past week and haven't been able
to get my tuner card working. I've read practically every usenet post
to no avail. Hopefully some one out there will be knowledgeable enough
to help me!

My system specs:

Kernel version: 2.4.20-8
XawTV version: 3.81

/etc/modules.conf:
...
alias   char-major-81   bttv
options tuner type=2
options bttv card=64 tuner=2

Output of dmesg:
Linux video capture interface: v1.00
i2c-core.o: i2c core module
i2c-algo-bit.o: i2c bit algorithm module
bttv: driver version 0.7.96 loaded
bttv: using 4 buffers with 2080k (8320k total) for capture
bttv: Host bridge is VIA Technologies, Inc. VT8367 [KT266]
bttv: Bt8xx card found (0).
bttv0: Bt878 (rev 17) at 00:0c.0, irq: 11, latency: 32, mmio:
0xe4002000
bttv0: detected: ATI TV Wonder/VE [card=64], PCI subsystem ID is
1002:0003
bttv0: using: BT878(ATI TV-Wonder VE) [card=64,insmod option]
i2c-core.o: adapter bt848 #0 registered as adapter 0.
bttv0: using tuner=2


i2c-core.o: driver i2c TV tuner driver registered.
tuner: probing bt848 #0 i2c adapter [id=0x10005]

bttv0: i2c attach [client=Philips NTSC (FI1236 and compati,ok]
i2c-core.o: client [Philips NTSC (FI1236 and compati] registered to
adapter [bt848 #0](pos. 0).
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: PLL: 28636363 => 35468950 ... ok
tuner: TV freq (0.-6) out of range (44-958)
tuner: TV freq (0.-6) out of range (44-958)
bttv0: PLL: switching off
tuner: TV freq (0.-6) out of range (44-958)
tuner: TV freq (0.-6) out of range (44-958)

I tossed the 'tuner=2' on the end of the bttv line in my
/etc/modules.conf as a last ditch effort to see if I could force bttv
to use the FI1236 NTSC tuner. Before I did this dmesg would always
print out 'bttv0: using tuner=19' instead of 'bttv0: using tuner=2'. I
know my card's tuner model is FI1236 (looked on the card) and not the
4006 FNS tuner it's autodetecting.

Everything I've tried doesn't work. I always end up with the message
'TV freq out of range' (same numbers too), which I read meant my tuner
# was wrong. But, it doesn't seem I can force the tuner type onto bttv
and it doesn't seem to be detecting the correct one.

When I run XawTV I do get static, but it's limited to the top tenth of
the window. The rest is black. I've also tried every combination of
'TV norm' and 'Frequency table' on the list, again, to no avail.

Does any one have any thoughts on what I should do?

-Dan Watling

2. What's the meaning of the compiler option "-xtarget" ?

3. Wireless under Redhat 9.0 and Slackware 9.0

4. Problem with sendmail

5. Upgrading from Redhat 6.1 to RedHat 9.0?

6. Setting Up LILO without The CD

7. Mandrake 9.0/ATI Radeon Mobility LY problem

8. Help with tape drive

9. Mandrake 9.0 & Ati Radeon 9700 Pro

10. Remote install using samba & Redhat 5.1

11. Remote control of a linux box (using IR remote mainly for multimedia)?

12. remote variables with remote commands using ssh