Автор Тема: eject не работает от пользователя  (Прочитано 4585 раз)

Оффлайн ut1

  • Участник
  • *
  • Сообщений: 163
  • Simply Linux P7 64bit
eject /dev/sr0
eject: не удалось извлечь. Последняя ошибка : Неприменимый к данному устройству ioctl

хотя несколько месяцев назад все работало. Систему и ядро за это время много раз обновлял.

От рута работает.
пользователь в группах cdrom и cdwriter

Это можно как нибудь починить?
« Последнее редактирование: 31.12.2013 09:49:19 от ut1 »

чайник

  • Гость
Re: eject не работает от пользователя
« Ответ #1 : 31.12.2013 10:04:27 »
Система KDesktop p7, обновляюсь постоянно.
eject /dev/sr0 работает как надо.

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 6 046
Re: eject не работает от пользователя
« Ответ #2 : 31.12.2013 12:20:26 »
Это можно как нибудь починить?
не про то
http://archlinux.org.ru/forum/topic/5088/
?

Оффлайн ut1

  • Участник
  • *
  • Сообщений: 163
  • Simply Linux P7 64bit
Re: eject не работает от пользователя
« Ответ #3 : 01.01.2014 21:42:47 »
не открывается только если вставлен диск
после команды
sdparm -C unlock /dev/sr0
команда eject начинает работать.

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 6 046
Re: eject не работает от пользователя
« Ответ #4 : 01.01.2014 21:53:18 »
Может баг завести с полным описанием и ссылкой на арчевские патчи https://aur.archlinux.org/packages.php?ID=51466
?

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: eject не работает от пользователя
« Ответ #5 : 05.01.2014 11:39:31 »
Может баг завести с полным описанием и ссылкой на арчевские патчи https://aur.archlinux.org/packages.php?ID=51466
?

Есть смысл. Имеет повторяемость:
$ eject
eject: не удалось извлечь. Последняя ошибка : Неприменимый к данному устройству ioctl
# sdparm -C unlock /dev/sr0
    /dev/sr0: Optiarc   DVD RW AD-7240S   1.01  [cd/dvd]
$ eject
$
$ groups
user wheel uucp proc cdrom floppy cdwriter audio radio camera video xgrp scanner
$ uname -r
3.4.75-led-ws-alt0.M70P.1

И эту комбинацию надо повторять постоянно после вставки каждого диска.


И ещё, проверил бы кто-нибудь, у меня в altlinux-p7-sysv-tde-20131225-i586 не работает ни с пустым, ни с полным лотком:
$ eject -T
ioctl: Ошибка ввода/вывода
Цитировать
man eject
       -T   With this option the drive is given  a  CD-ROM  tray  close  command  if  it's opened,  and  a CD-ROM tray eject command if it's closed. Not all devices support this command, because it uses the above CD-ROM tray close command.

Спойлер
$ eject -n
eject: устройство -  `/dev/sr0'
$ eject -s
eject: не удалось извлечь. Последняя ошибка : Неправильный адрес
$ eject -r
eject: не удалось извлечь. Последняя ошибка : Ошибка ввода/вывода

$ strace -e ioctl eject
ioctl(3, CDROMEJECT, 0x804c44b)         = -1 EIO (Input/output error)
ioctl(3, SG_GET_VERSION_NUM, 0xbfd7360c) = 0
ioctl(3, SG_IO, {'S', SG_DXFER_NONE, cmd[6]=[1e, 00, 00, 00, 00, 00], mx_sb_len=32, iovec_count=0, dxfer_len=0, timeout=2000, flags=0}) = -1 EFAULT (Bad address)
ioctl(3, FDEJECT, 0xbfd73648)           = -1 ENOTTY (Inappropriate ioctl for device)
ioctl(3, MGSL_IOCGPARAMS or MMTIMER_GETRES or MTIOCTOP or SNDCTL_MIDI_MPUMODE, 0xbfd73620) = -1 ENOTTY (Inappropriate ioctl for device)
eject: не удалось извлечь. Последняя ошибка : Неприменимый к данному устройству ioctl
+++ exited with 1 +++
« Последнее редактирование: 05.01.2014 13:04:09 от Speccyfighter »

Оффлайн ut1

  • Участник
  • *
  • Сообщений: 163
  • Simply Linux P7 64bit
Re: eject не работает от пользователя
« Ответ #6 : 06.01.2014 19:07:20 »
у меня eject -T работает с пустым.



можно попробовать в sysctl прописать чтоб не блокировало лоток.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: eject не работает от пользователя
« Ответ #7 : 07.01.2014 01:04:06 »
у меня eject -T работает с пустым.

можно попробовать в sysctl прописать чтоб не блокировало лоток.
Thnx. Натолкнуло на мысль.

Мельком посмотрел своё же:
lock/unlock cd/dvd-rom
http://forum.altlinux.org/index.php/topic,26079.msg207004.html#msg207004
http://forum.altlinux.org/index.php/topic,26079.msg207008.html#msg207008

Интерэ-э-эсно...:
$ uname -r
3.10.25-std-def-alt1
$ strace -e ioctl eject
ioctl(3, CDROMEJECT, 0x804c44b)         = 0
+++ exited with 0 +++
# Распихнуть
$ strace -e ioctl eject -T
ioctl(3, CDROMEJECT, 0)                 = 0
+++ exited with 0 +++
# Запихнуть
$ strace -e ioctl eject -T
ioctl(3, CDROMEJECT, 0)                 = 0
ioctl(3, CDROMCLOSETRAY, 0)             = 0
+++ exited with 0 +++
$ cat /proc/sys/dev/cdrom/lock
1

С пустым лотком команде 'eject -T' пофиг на состояние lock, зато не пофиг на линейку ядра.
В led-ws она фордыбачится.
Как?, - предыдущим моим постом под спойлером вывод strace.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: eject не работает от пользователя
« Ответ #8 : 07.01.2014 01:44:06 »
Странно...
Почему сейчас работает?
$ uname -r
3.4.75-led-ws-alt0.M70P.1
$ strace -e ioctl eject -T
ioctl(3, CDROMEJECT, 0)                 = 0
+++ exited with 0 +++
$ cat /proc/sys/dev/cdrom/lock
1
$ cat /etc/sysctl.conf | grep cd
# dev.cdrom.lock = 0
$ strace -e ioctl eject -T
ioctl(3, CDROMEJECT, 0)                 = 0
ioctl(3, CDROMCLOSETRAY, 0)             = 0
+++ exited with 0 +++
$ strace -e ioctl eject -n
eject: устройство -  `/dev/sr0'
+++ exited with 0 +++
$ strace -e ioctl eject -r
ioctl(3, CDROMEJECT, 0x804c44b)         = 0
+++ exited with 0 +++
$ ls -l /dev/|grep rom
lrwxrwxrwx 1 root   root         3 янв  7 00:47 cdrom -> sr0
brw-rw---- 1 user   cdrom  11,   0 янв  7 00:47 sr0

Ничего не понимаю...
Без диска в лотке.
« Последнее редактирование: 07.01.2014 04:45:33 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: eject не работает от пользователя
« Ответ #9 : 07.01.2014 05:10:38 »
С диском в лотке:

$ mount | grep sr0
/dev/sr0 on /media/Compact type iso9660 (ro,nosuid,nodev,noatime,uid=500,utf8)
$ strace -e ioctl eject -vT
eject: используется устройство по-умолчанию `cdrom'
eject: имя устройства - `cdrom'
eject: полное имя `/dev/cdrom'
eject: `/dev/cdrom' является ссылкой на `/dev/sr0'
eject: `/dev/sr0' смонтировано в `/media/Compact'
eject: размонтирование `/dev/sr0' из `/media/Compact'
umount: /media/Compact: umount failed: Операция не позволена
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3315, si_status=1, si_utime=0, si_stime=0} ---
eject: не удалось размонтировать `/media/Compact'
+++ exited with 1 +++
$ mount | grep sr0
$
$ isoinfo -d -i /dev/sr0 | head -n 2
CD-ROM is in ISO 9660 format
System id: ALT Linux
$ strace -e ioctl eject -vT
eject: используется устройство по-умолчанию `cdrom'
eject: имя устройства - `cdrom'
eject: полное имя `/dev/cdrom'
eject: `/dev/cdrom' является ссылкой на `/dev/sr0'
eject: `/dev/sr0' не смонтировано
eject: `/dev/sr0' не является точкой монтирования
eject: `/dev/sr0' это не устройство с несколькими дисковыми разделами
eject: смена состояния лотка
ioctl(3, CDROMEJECT, 0)                 = -1 EIO (Input/output error)
ioctl: Ошибка ввода/вывода
+++ exited with 1 +++
$ cat /etc/sysctl.conf |grep cdr
dev.cdrom.lock = 0
$ cat /proc/sys/dev/cdrom/lock
0
$ strace -e ioctl eject -vT /dev/sr0
eject: имя устройства - `/dev/sr0'
eject: полное имя `/dev/sr0'
eject: `/dev/sr0' не смонтировано
eject: `/dev/sr0' не является точкой монтирования
eject: `/dev/sr0' это не устройство с несколькими дисковыми разделами
eject: смена состояния лотка
ioctl(3, CDROMEJECT, 0)                 = -1 EIO (Input/output error)
ioctl: Ошибка ввода/вывода
+++ exited with 1 +++
$ cat  /lib/udev/rules.d/60-cdrom_id.rules
# do not edit this file, it will be overwritten on update

ACTION=="remove", GOTO="cdrom_end"
SUBSYSTEM!="block", GOTO="cdrom_end"
KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end"
ENV{DEVTYPE}!="disk", GOTO="cdrom_end"

# unconditionally tag device as CDROM
KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1"

# media eject button pressed
ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

# import device and media properties and lock tray to
# enable the receiving of media eject button events
IMPORT{program}="cdrom_id --lock-media $devnode"

KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100"

LABEL="cdrom_end"
# sdparm -C unlock /dev/sr0
  /dev/sr0: Optiarc   DVD RW AD-7240S   1.01  [cd/dvd]
$ strace -e ioctl eject -vT
eject: используется устройство по-умолчанию `cdrom'
eject: имя устройства - `cdrom'
eject: полное имя `/dev/cdrom'
eject: `/dev/cdrom' является ссылкой на `/dev/sr0'
eject: `/dev/sr0' не смонтировано
eject: `/dev/sr0' не является точкой монтирования
eject: `/dev/sr0' это не устройство с несколькими дисковыми разделами
eject: смена состояния лотка
ioctl(3, CDROMEJECT, 0)                 = 0
+++ exited with 0 +++

Гадский udev.

Нет, всё-таки Natrio был прав.
Вынуть диск можно только кнопкой. Программно никак.
Или с арчевым патчем.