Как предотвратить открытие всплывающих окон «Невозможно открыть устройство MTP»?

10282
Michael Aaron Safyan

Я часто подключаю свое устройство Android к USB-накопителю просто в целях зарядки, не намереваясь использовать файловую систему (и с выключенным экраном или с настройками USB в режиме «только зарядка», что не позволяет телефону разрешить подключение для передачи данных быть произведенным). Однако, когда я делаю это, я часто получаю очень много раздражающих всплывающих окон, которые выглядят как всплывающее окно, показанное на рисунке ниже:

Как предотвратить открытие всплывающих окон «Невозможно открыть устройство MTP»?

В идеале, должен быть какой-то способ настроить оконный менеджер, чтобы он не отображал эти всплывающие окна в первую очередь (без отключения автоматического монтирования, чтобы я все еще мог - в некоторых случаях - использовать устройство в качестве файловой системы без необходимости монтировать его вручную, т. е. когда настройка USB телефона находится в режиме «MTP» и экран разблокирован). В противном случае было бы идеально, если бы существовала простая команда, которую я мог бы использовать для уничтожения всех экземпляров этого всплывающего окна (без одновременного уничтожения остальных оконных менеджеров). В противном случае решения по отключению автоматического монтирования этого конкретного устройства (без отключения всех автоматических подключений) будут приемлемым решением.

Любые предложения о том, как предотвратить появление этого всплывающего окна или уничтожить несколько экземпляров всплывающего окна в одной команде?

Для большего контекста я использую Ubuntu 14.04 LTS; Я не уверен, что Gnome или Nemo ответственны за эту ошибку (я знаю, что мой ярлык «Домашний каталог» вызывает «nemo», но я почти уверен, что в системе есть также приложения на основе Gnome, есть ~/.gnomeи ~/.gnome2каталог и т. д., чтобы это мог быть гном).

6
Попробуйте это: проигнорируйте всплывающее окно, затем потяните вниз панель уведомлений (которая говорит, что она «подключена как мультимедийное устройство») - если она у вас есть, нажмите на «Постоянное» соединение и переключитесь из «Режим MTP» в «Режим PTP»: harrymc 7 лет назад 0
Решение вашего ответа здесь на [стек обмена Ubuntu] (http://askubuntu.com/questions/624183/how-can-i-stop-unable-to-mount-android-device-messages-from-popping -до) Computing Corn 7 лет назад 1
Попробуйте также решение в [этой теме] (https://ubuntu-mate.community/t/mounting-android-devices-on-ubuntu-mate/3357). Также попробуйте `sudo apt-get install mtp-tools mtpfs`. harrymc 7 лет назад 1
Эти решения не работают / не решают другую проблему. Michael Aaron Safyan 7 лет назад 0
@MichaelAaronSafyan _ «Эти решения не работают / не решают другую проблему» ._ С помощью kde, когда я установил `mtp-tools mtpfs`, он решил похожую проблему ... Я не понял, пробовали ли вы предложение Гарри, и оно не работает или если вы просто от него отказались ... обратная связь может быть полезна и другим пользователям ... Hastur 7 лет назад 0

5 ответов на вопрос

6
Deltik

Итак, у вас есть это:

Unable to mount Pixel

Файловый менеджер представляет те сообщения об ошибках, которые приходят от GVfs, которая передает информацию из libmtp .

Предотвращение появления файловых менеджеров

К сожалению, я еще не нашел способ подавления всплывающих окон с ошибками в файловом менеджере GNOME / MATE / Cinnamon. Возможно, когда-нибудь я посмотрю исходный код, чтобы увидеть, где ошибка может быть отключена или перехвачена.

Поскольку у меня нет ответа на этот вопрос, давайте перейдем к вашему следующему лучшему приемлемому варианту, который ...

Закрытие всплывающих окон файлового менеджера по команде

Вот скрипт, который можно использовать для очистки всплывающих окон в GNOME, MATE и Cinnamon:

#!/bin/bash  function list_empty_windows() { wmctrl -lp | awk "}" }  function list_wm_pids() { ps aux | grep cinnamon | perl -pe 's/.*\+\s+(\d+)\s+.*/\1/' pidof nautilus | tr ' ' '\n' pidof caja | tr ' ' '\n' pidof nemo | tr ' ' '\n' }  function list_popup_windows() { local empty_window_file=$(mktemp) local window_manager_pid_file=$(mktemp) list_empty_windows > "$empty_window_file" list_wm_pids | sort > "$window_manager_pid_file" join "$empty_window_file" "$window_manager_pid_file" }  function main() { list_popup_windows | cut -d ' ' -f 2 | xargs -n1 -P100 wmctrl -ic }  main 

Если вы хотите запомнить простую команду, они закроют все окна в вашем файловом менеджере и заставят ваш рабочий стол перезапустить ваш файловый менеджер:

  • ГНОМ: killall nautilus
  • ПРИЯТЕЛЬ: killall caja
  • Корица: killall nemo

Отключение автонастройки Google Pixel

Кажется, не существует способа игнорировать только Google Pixel.

Я не рекомендую это, и я не проверял это сам, но чтобы выделить Google Pixel, вам, возможно, придется закомментировать вендор продукта 18d1 4ee1 (Google Pixel) и вендор продукта 18ee 1 4ee2 (Google Pixel отладка) правила и hwdb.

Вы можете найти записи с помощью этой команды:

grep -ri '18d1.*4ee[12]' /lib/udev 

После закомментирования записей udev в Google Pixel может потребоваться перезапустить среду рабочего стола, перезагрузить компьютер и / или выполнить некоторую комбинацию следующих команд:

sudo udevadm hwdb --update sudo udevadm control --reload-rules sudo udevadm trigger 

Опять же, это не проверено, и я не рекомендую это, особенно потому, что для того, чтобы снова смонтировать Google Pixel, вам придется отменить изменения udev, сделанные вручную.


объяснение

Согласно /var/log/syslogGNOME, ошибка появляется, потому что USB-устройство исчезло при второй попытке его инициализации:

Jan 24 01:32:41 node51 kernel: [613604.065259] usb 3-2: new SuperSpeed USB device number 96 using xhci_hcd Jan 24 01:32:41 node51 kernel: [613604.082734] usb 3-2: New USB device found, idVendor=18d1, idProduct=4ee1 Jan 24 01:32:41 node51 kernel: [613604.082739] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Jan 24 01:32:41 node51 kernel: [613604.082741] usb 3-2: Product: Pixel Jan 24 01:32:41 node51 kernel: [613604.082743] usb 3-2: Manufacturer: Google Jan 24 01:32:41 node51 kernel: [613604.082745] usb 3-2: SerialNumber: XXXXXXXXXXXX Jan 24 01:32:41 node51 kernel: [613604.083855] usb 3-2: Enable of device-initiated U1 failed. Jan 24 01:32:41 node51 kernel: [613604.084154] usb 3-2: Enable of device-initiated U2 failed. Jan 24 01:32:42 node51 org.gtk.vfs.Daemon[4988]: Device 0 (VID=18d1 and PID=4ee1) is a Google Inc (for LG Electronics/Samsung) Nexus 4/5/7/10 (MTP). Jan 24 01:32:43 node51 org.gtk.vfs.GPhoto2VolumeMonitor[4988]: (process:5256): GVFS-GPhoto2-WARNING **: device (null) has no BUSNUM property, ignoring Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: PTP_ERROR_IO: failed to open session, trying again after resetting USB interface Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: LIBMTP libusb: Attempt to reset device Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: inep: usb_get_endpoint_status(): No such device Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: outep: usb_get_endpoint_status(): No such device Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: libusb_open() failed!: No such device Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: LIBMTP PANIC: Could not init USB on second attempt Jan 24 01:33:34 node51 org.gtk.vfs.Daemon[4988]: ** (gvfsd:5151): WARNING **: dbus_mount_reply: Error from org.gtk.vfs.Mountable.mount(): Unable to open MTP device '[usb:003,096]' 

В приведенном выше примере GVfs через libmtp идентифицировали устройство 096 с шиной USB 003 как устройство Google Pixel, но устройство Google Pixel уже отключилось. В следующий раз, когда Google Pixel подключится, Linux назначит новый идентификатор устройства.

Ошибка libmtp, потому что он все еще пытается работать с исчезнувшим устройством. GVfs обнаруживает ошибку и пересылает ее в файлы GNOME или какой-либо другой файловый менеджер на основе GNOME.

Кто виноват?

Исходя из того, что я обнаружил, у них есть возможности для улучшения:

libmtp

libmtp, вероятно, является наиболее ответственным в возникновении этой проблемы.

Это должно улучшить обработку ошибок, когда устройство MTP подключено и внезапно отключено. Ошибка должна быть передана, только если устройство все еще существует. Если USB-устройство не существует, попытаться сбросить его не имеет смысла.

Сообщить о проблемах в libmtp

Android

Android может улучшить реализацию MTP, чтобы он не отключался сразу после подключения к компьютеру.

Сообщить о проблемах на Android

Наутилус / Каха / Немо

Было бы неплохо, если бы эти программы предлагали подавлять сообщения об ошибках или отображать их менее всплывающим образом.

Сообщить о проблемах в GNOME
Сообщить о проблемах в MATE Caja
Сообщить о проблемах в Linux Mint Nemo

Этот ответ очень, очень близок (спасибо за предложение относительно wmctrl). Однако оказывается, что PID из пустых окон - это тот, который не связан ни с одним из вышеперечисленных, а с командой "/ usr / lib / x86_64-linux-gnu / cinnamon-settings-daemon / cinnamon-settings-daemon". Однако того, что вы мне дали, достаточно, чтобы создать скрипт, который очищает все всплывающие окна. Michael Aaron Safyan 7 лет назад 0
К вашему сведению, я обновил / отредактировал ваш ответ, чтобы заменить однострочник скриптом, который успешно закрывает всплывающие окна. Michael Aaron Safyan 7 лет назад 0
3
Telmo Henrique Valverde

У меня есть обходной путь для этого на Немо :

Перейдите в « Редактирование»> «Установки»> «Поведение» и в разделе « Обработка мультимедиа» снимите флажок «Автоматически монтировать съемные носители при вставке и при запуске».

После завершения зарядки телефона вы можете снова включить опцию, чтобы возобновить поведение по умолчанию.

1
Logan
sudo apt-get install mtp-tools mtpfs 

Выполнение этой команды установит необходимые инструменты, и ошибка не появится. Может потребоваться полная перезагрузка.

Как это должно помочь, если устройство намеренно не находится в режиме, который позволяет использовать его с MTP? [Я не пытаюсь использовать устройство с MTP; скорее, я пытаюсь отключить раздражающие уведомления / всплывающие окна, которые появляются, когда я просто хочу подключить телефон для зарядки] Michael Aaron Safyan 7 лет назад 0
@Logan: Если бы вы прочитали комментарии к посту, вы бы увидели, что этот совет уже был предложен и не помог. Чтобы избежать таких ошибок, рекомендуется всегда читать все существующие ответы и комментарии, прежде чем отвечать. harrymc 7 лет назад 1
0
Roy Smith

Одна вещь, которую вы можете попробовать, это изменить способ, которым Android управляет USB-портом на устройстве. Начиная с Marshmallow (Android 6.0), настройка по умолчанию для USB-порта была только для зарядки и изменения, которую вам нужно будет нажать на панель уведомлений, а затем уведомление, чтобы изменить его для других целей.
Первое, что вам нужно сделать, это включить режим разработчика.
Для этого откройте «Настройки» - «О телефоне», затем прокрутите вниз, пока не увидите номер сборки, а затем просто нажмите на него 7 раз, чтобы включить режим разработчика.
Вы увидите небольшое сообщение о том, что вы теперь разработчик, как только вы выполнили все шаги в правильном порядке.

Теперь, когда включен режим разработчика, вы увидите новый пункт меню в меню настроек «Параметры разработчика», нажмите на него, прокрутите вниз, пока не увидите Конфигурация USB, а затем нажмите на него.
После этого вы увидите окно, в котором вы можете указать поведение USB-порта по умолчанию при подключении к нему кабеля. У вас будет выбор Charge, MTP, PTP и любых других протоколов, которые поддерживает ваше устройство.

0
Amias

более простое решение - настроить телефон для представления на компьютере в качестве устройства midi вместо mtp, ptp или чего-либо еще.

Вам может понадобиться Android 8, я могу сделать это на моем oneplus3t

Это тогда останавливает участие nautilus, но быстро отменяется, когда вы хотите общий доступ к файлам.