Ini adalah program yang akan membantu:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
void print_help(char *prog_name) {
printf("Usage: %s [-n] DEVNAME COMMAND\n", prog_name);
printf("Usage: '-n' is an optional argument if you want to push a new line at the end of the text\n");
printf("Usage: Will require 'sudo' to run if the executable is not setuid root\n");
exit(1);
}
int main (int argc, char *argv[]) {
char *cmd, *nl = "\n";
int i, fd;
int devno, commandno, newline;
int mem_len;
devno = 1; commandno = 2; newline = 0;
if (argc < 3) {
print_help(argv[0]);
}
if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'n') {
devno = 2; commandno = 3; newline=1;
} else if (argc > 3 && argv[1][0] == '-' && argv[1][1] != 'n') {
printf("Invalid Option\n");
print_help(argv[0]);
}
fd = open(argv[devno],O_RDWR);
if(fd == -1) {
perror("open DEVICE");
exit(1);
}
mem_len = 0;
for ( i = commandno; i < argc; i++ ) {
mem_len += strlen(argv[i]) + 2;
if ( i > commandno ) {
cmd = (char *)realloc((void *)cmd, mem_len);
} else { //i == commandno
cmd = (char *)malloc(mem_len);
}
strcat(cmd, argv[i]);
strcat(cmd, " ");
}
if (newline == 0)
usleep(225000);
for (i = 0; cmd[i]; i++)
ioctl (fd, TIOCSTI, cmd+i);
if (newline == 1)
ioctl (fd, TIOCSTI, nl);
close(fd);
free((void *)cmd);
exit (0);
}
Salin kode di atas ke beberapa file C (Untuk mis. Ttyecho.c). Jalankan perintah berikut di direktori yang Anda buat file C untuk mengkompilasi kode.
make ttyecho
Salin file ini ke direktori tempat sampah di bawah Direktori Beranda Anda. Buat direktori jika tidak ada. Ini adalah praktik yang baik untuk menjaga semua binari / executable khusus dalam direktori bin ini.
Mulai terminal lain atau pindah ke terminal terbuka lain yang ingin Anda kendalikan dan jalankan perintah tty. Anda dapat melihat contoh output di bawah ini.
@~$ tty
/ dev / pts / 5
Sekarang untuk menjalankan perintah pada / dev / pts / 5 , jalankan perintah berikut di terminal pengendali / asli.
sudo ttyecho -n /dev/pts/5 ls
Anda akan melihat bahwa perintah ls dijalankan di / dev / pts / 5 . The -n pilihan membuat ttyecho mengirim baris baru setelah perintah, sehingga perintah dijalankan dan tidak hanya dimasukkan. Utilitas ini dapat digunakan untuk mengirim data apa pun ke terminal lain. Misalnya, Anda dapat membuka vim di / dev / pts / 5 dan kemudian menjalankan perintah berikut di terminal pengendali untuk menyebabkan vim keluar di / dev / pts / 5 .
sudo ttyecho -n /dev/pts/5 :q
Untuk menghindari penggunaan sudo sepanjang waktu, sehingga perintahnya mudah skrip, ubah pemilik / izin yang dapat dieksekusi ini dengan menggunakan perintah berikut.
sudo chown root:root ttyecho
sudo chmod u+s ttyecho
NB: Mengatur bit setuid dapat menjadi risiko keamanan.
Sumber: http://www.humbug.in/2010/utility-to-send-commands-or-data-to-other-terminals-ttypts/