[SOLVED] о tty, chvt...

нужно определить какой tty активен, если сама программа, написанная для этого, зупущена в другом(этом же) tty/работает как демон
Текущая консоль:
$ cat /sys/class/tty/tty0/active
tty7
не (

>>cat 1.sh       
#!/bin/bash
cmnd=`cat /sys/class/tty/tty0/active`
touch /tmp/ttys
while :
do
  echo $cmnd >> /tmp/ttys
  sleep 3s
done

написал для systemd демона, запускающий скрипт при старте системы. Всегда выдает tty1
shlemisto, у меня всё правильно. А вот в вашем скрипте – нет :)

Строчка
cmnd=`cat /sys/class/tty/tty0/active`
ОДНОКРАТНО читает в переменную вывод команды, копирующей псевдофайл с именем TTY.
А в цикле строчка
echo $cmnd >> /tmp/ttys
каждый раз выводит в файл содержимое этой переменной, которая после запуска уже не меняется.

Вам надо было поместить чтение имени текущей консоли в цикл, то бишь сделать так:
#!/bin/bash
while sleep 3s
do cat /sys/class/tty/tty0/active >> /tmp/ttys
done
Программирование – это просто :)
спасибо тебе, мил человек

пхаха, ну я и ступил =)

код на сях

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main(void) 
{
    int fd  = -1;
    int ret = -1;
    
    char current_tty[10] = { 0 };
    char prev_tty[10]    = { 0 };
    for (;;) 
    {
            fd = open("/sys/class/tty/tty0/active", O_RDONLY);
            
            if (fd < 0) 
                break;
        
            fd_set         fds;
            int            ret;
            struct timeval tv;
            FD_ZERO(&fds);
            FD_SET(fd, &fds);
            
            tv.tv_sec  = 0;
            tv.tv_usec = 500;
            ret = select(fd + 1, &fds, NULL, NULL, &tv);
            if (FD_ISSET(fd, &fds)) 
            { 
                memset(current_tty, 0, sizeof(current_tty));
                ret = read(fd, current_tty, sizeof(current_tty));
                if (!strlen(current_tty) || strcmp(current_tty, prev_tty))
                {
                    memset(prev_tty, 0, sizeof(prev_tty));
                    strcpy(prev_tty, current_tty);
                    
                    printf("%s", current_tty);
                }
            }
            
            sleep(1);
            close(fd);
            fflush(stdout);
    }
    
    return EXIT_SUCCESS;
}
 
Зарегистрироваться или войдите чтобы оставить сообщение.