<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>24003</bug_id>
          
          <creation_ts>2010-09-01 18:32:22 +0400</creation_ts>
          <short_desc>chvt из X.org: неверная диагностика при недостаточности прав доступа</short_desc>
          <delta_ts>2010-09-03 15:13:28 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>console-vt-tools</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Cherepanov">cas</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111826</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2010-09-01 18:32:22 +0400</bug_when>
    <thetext>[cas@cas ~]$ chvt 2
Couldn&apos;t get a file descriptor referring to the console
[cas@cas ~]$ ll /dev/tty2
crw------- 1 root root 4, 2 Авг 30 10:25 /dev/tty2

Очевидно, что при наличии файла устровйства, но недостаточности прав доступа к нему диагностика должна быть 
chvt: /dev/tty2: Permission denied
или подобная.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111828</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2010-09-01 18:46:20 +0400</bug_when>
    <thetext>(В ответ на комментарий №0)
&gt; [cas@cas ~]$ chvt 2
&gt; Couldn&apos;t get a file descriptor referring to the console

chvt не смогла открыть консоль о чём и написала.

&gt; Очевидно, что при наличии файла устровйства, но недостаточности прав доступа к
&gt; нему диагностика должна быть 
&gt; chvt: /dev/tty2: Permission denied
&gt; или подобная.

Выведенное сообщение не имеет отношения к правам.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111831</commentid>
    <comment_count>2</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2010-09-01 18:59:19 +0400</bug_when>
    <thetext>Причину неполучения файлового дескриптора она не указала, что затрудняет диагностику. И не открыть консоль, а открыть файловый дескриптор, знания о котором избыточны для использования этой программы.

&gt; Выведенное сообщение не имеет отношения к правам.
Оно - следствие недостаточности прав.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111836</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2010-09-01 19:30:44 +0400</bug_when>
    <thetext>(В ответ на комментарий №2)
&gt; Причину неполучения файлового дескриптора она не указала, что затрудняет
&gt; диагностику.

У тебя на машине не получилось открыть дескриптор на консоль, либо все файлы устройств или дескрипторы не являются терминалами. Это исключительная ситуация, о которой было сообщено максимально полно.

&gt; И не открыть консоль, а открыть файловый дескриптор, знания о
&gt; котором избыточны для использования этой программы.

Если ваша машина сломана настолько, то такие знания необходимы.

&gt; Оно - следствие недостаточности прав.

Нет. Эта проблема не имеет отношения к /dev/tty2.

На нормально работающей ситеме strace выглядит так:

$ ls -al /dev/tty5
crw------- 1 root root 4, 5 Сен  1 18:46 /dev/tty5

$ LANG=C strace -fF -e trace=open,ioctl chvt 5
6739  open(&quot;/etc/ld.so.cache&quot;, O_RDONLY) = 3
6739  open(&quot;/lib/libc.so.6&quot;, O_RDONLY)  = 3
6739  open(&quot;/proc/self/fd/0&quot;, O_RDWR)   = 3
6739  ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
6739  ioctl(3, KDGKBTYPE, 0xafdad22f)   = 0
6739  ioctl(3, VIDIOC_G_COMP or VT_ACTIVATE, 0x5) = 0
6739  ioctl(3, VIDIOC_S_COMP or VT_WAITACTIVE, 0x5) = 0

и происходит переключение на tty5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111841</commentid>
    <comment_count>4</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2010-09-01 20:45:27 +0400</bug_when>
    <thetext>Данное поведение наблюдается только при переключении из X.org. На обычной консоли всё работает.

[cas@cas ~]$ LANG=C strace -fF -e trace=open chvt 2
open(&quot;/etc/ld.so.cache&quot;, O_RDONLY)      = 3
open(&quot;/lib/libc.so.6&quot;, O_RDONLY)        = 3
open(&quot;/proc/self/fd/0&quot;, O_RDWR)         = 3
open(&quot;/dev/tty&quot;, O_RDWR)                = 3
open(&quot;/dev/tty0&quot;, O_RDWR)               = -1 EACCES (Permission denied)
open(&quot;/dev/tty0&quot;, O_WRONLY)             = -1 EACCES (Permission denied)
open(&quot;/dev/tty0&quot;, O_RDONLY)             = -1 EACCES (Permission denied)
open(&quot;/dev/vc/0&quot;, O_RDWR)               = -1 ENOENT (No such file or directory)
open(&quot;/dev/vc/0&quot;, O_WRONLY)             = -1 ENOENT (No such file or directory)
open(&quot;/dev/vc/0&quot;, O_RDONLY)             = -1 ENOENT (No such file or directory)
open(&quot;/dev/console&quot;, O_RDWR)            = -1 EACCES (Permission denied)
open(&quot;/dev/console&quot;, O_WRONLY)          = -1 EACCES (Permission denied)
open(&quot;/dev/console&quot;, O_RDONLY)          = -1 EACCES (Permission denied)
Couldn&apos;t get a file descriptor referring to the console

[cas@cas ~]$ ls -l /dev/tty0
crw--w---- 1 root root 4, 0 Авг 30 14:25 /dev/tty0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111844</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2010-09-01 22:10:37 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Couldn&apos;t get a file descriptor referring to the console

Ты где-нибудь в выводе strace видишь /dev/tty2 ?

Я ещё раз говорю, chvt безразличны права на этот файл. Он не смог открыть дескриптор на консоль, хотя искал его не в одном месте. Сообщение полностью описывает ситуацию.
Кстати, ты напрасно исключил отслеживание ioctl в strace.

Вот вывод из urxvt в Иксах:

$ l /dev/tty5
crw------- 1 root root 4, 5 Сен  1 18:46 /dev/tty5

$ LANG=C strace -fF -e trace=open,ioctl chvt 5
open(&quot;/etc/ld.so.cache&quot;, O_RDONLY)      = 3
open(&quot;/lib/libc.so.6&quot;, O_RDONLY)        = 3
open(&quot;/proc/self/fd/0&quot;, O_RDWR)         = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B4000000 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0xafc0b47f)         = -1 EINVAL (Invalid argument)
open(&quot;/dev/tty&quot;, O_RDWR)                = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B4000000 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0xafc0b47f)         = -1 EINVAL (Invalid argument)
open(&quot;/dev/tty0&quot;, O_RDWR)               = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, KDGKBTYPE, 0xafc0b47f)         = 0
ioctl(3, VIDIOC_G_COMP or VT_ACTIVATE, 0x5) = -1 EPERM (Operation not permitted)
chvt: VT_ACTIVATE: Operation not permitted

Наведи порядок у себя в системе.

Пожалуйста перестань переоткрывать этот баг.
Ошибки нет (по крайней в первоначальной формулировке), сообщение правильное и ничего исправлять я не планирую.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111847</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-09-02 05:25:25 +0400</bug_when>
    <thetext>(In reply to comment #5)
&gt; Ошибки нет (по крайней в первоначальной формулировке), сообщение правильное и
&gt; ничего исправлять я не планирую.

С этим я почти согласен, см. ниже.

(In reply to comment #3)
&gt; У тебя на машине не получилось открыть дескриптор на консоль, либо все файлы
&gt; устройств или дескрипторы не являются терминалами. Это исключительная ситуация,
&gt; о которой было сообщено максимально полно.

С этим я не согласен в том смысле, что это никакая не исключительная ситуация.
Доступа к /dev/tty0 (текущая вирт.консоль) может и не быть.
В случае если логин произведён не с помощью login(1), а через *dm, то и управляющий терминал (/dev/tty) не является вирт.консолью, не говоря уже о /dev/console.

Возвращаясь к нашей фразе:
Couldn&apos;t get a file descriptor referring to the console

Тут есть одна ошибка и одна неточность:
Ошибка в слове &quot;the&quot;: поскольку утилита пытается получить дескриптор любой подходящей вирт.консоли, определённый артикль тут неуместен.
Неточность в слове console: поскольку речь идет о вирт.консоли (даже при попытке использовать /dev/console), было бы точнее написать &quot;virtual console&quot;.

Итого, я предлагаю заменить &quot;the console&quot; на &quot;a virtual console&quot;. :)
Если хочется покороче, то можно написать так:
Couldn&apos;t find a suitable virtual console</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111848</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2010-09-02 08:00:24 +0400</bug_when>
    <thetext>(В ответ на комментарий №6)
&gt; С этим я не согласен в том смысле, что это никакая не исключительная ситуация.

Насчёт исключительности я имел ввиду следующее: порядок поиска консоли таков:

/proc/self/fd/0
/dev/tty
/dev/tty0
/dev/vc/0
/dev/console
дескрипторы 0,1,2

если ни одного нет, то для chvt это ситуация не является рабочей :)
Он даже не может перейти к стадии переключения терминала.

&gt; Доступа к /dev/tty0 (текущая вирт.консоль) может и не быть.
&gt; В случае если логин произведён не с помощью login(1), а через *dm, то и
&gt; управляющий терминал (/dev/tty) не является вирт.консолью, не говоря уже о
&gt; /dev/console.

Но у самой утилиты терминал должен быть.

&gt; Тут есть одна ошибка и одна неточность:
&gt; Ошибка в слове &quot;the&quot;: поскольку утилита пытается получить дескриптор любой
&gt; подходящей вирт.консоли, определённый артикль тут неуместен.

Я думаю, что &quot;the&quot; потому что имеется ввиду терминал на конкретном компьютере.

&gt; Итого, я предлагаю заменить &quot;the console&quot; на &quot;a virtual console&quot;. :)
&gt; Если хочется покороче, то можно написать так:
&gt; Couldn&apos;t find a suitable virtual console

Всё это косметические изменения и вносить их без крайней нужды мне не хочется так как предётся править ещё и все переводы. Было бы понятно если бы сообщение было в корне неправильное или не отражало сути проблемы.

Я постараюсь не забыть исправить эту фразу, когда буду вносить изменения, требующие усилий локализаторов.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111865</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2010-09-02 21:16:47 +0400</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; Я постараюсь не забыть исправить эту фразу, когда буду вносить изменения,
&gt; требующие усилий локализаторов.
Надеюсь на это. Баг закрываю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111872</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2010-09-03 11:12:59 +0400</bug_when>
    <thetext>(В ответ на комментарий №8)
&gt; Надеюсь на это. Баг закрываю.

Я рад, что решением &quot;неверная диагностика при недостаточности прав доступа&quot; исправляется для _тебя_ заменой в сообщении &quot;the console&quot; на &quot;a virtual console&quot;.
Шикарно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111889</commentid>
    <comment_count>10</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2010-09-03 15:13:28 +0400</bug_when>
    <thetext>(В ответ на комментарий №9)
&gt; (В ответ на комментарий №8)
&gt; &gt; Надеюсь на это. Баг закрываю.
&gt; 
&gt; Я рад, что решением &quot;неверная диагностика при недостаточности прав доступа&quot;
&gt; исправляется для _тебя_ заменой в сообщении &quot;the console&quot; на &quot;a virtual
&gt; console&quot;.
&gt; Шикарно.
Я просто знаю, что от тебя большего не дождёшься. :)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>