web-dev-qa-db-pt.com

Como evitar que os pop-ups "Não é possível abrir o dispositivo MTP" sejam abertos?

Muitas vezes eu conecto meu dispositivo Android na unidade USB simplesmente para fins de cobrança sem a intenção de usar o sistema de arquivos (e com a tela desligada ou com as configurações USB no modo "somente carregamento", que impedem a telefone de permitir que uma conexão de dados seja feita). No entanto, quando faço isso, muitas vezes recebo um número muito grande de pop-ups irritantes que se parecem com o pop-up exibido na imagem abaixo:

enter image description here

Idealmente, haveria alguma maneira de configurar o gerenciador de janelas para não exibir esses pop-ups em primeiro lugar (sem desativar a automontagem, para que eu ainda possa - na ocasião - usar o dispositivo como um sistema de arquivos sem precisar montar manualmente , ou seja, quando a configuração USB do telefone estiver no modo "MTP" e a tela estiver desbloqueada). Caso contrário, seria ideal se houvesse um comando simples que eu possa usar para matar todas as instâncias deste popup (sem matar o resto do gerenciador de janelas ao mesmo tempo). Caso contrário, soluções para desabilitar a montagem automática deste dispositivo específico (sem desabilitar todo o automontamento) seriam uma solução aceitável.

Alguma sugestão sobre como evitar que este pop-up aconteça em primeiro lugar ou para matar várias instâncias do pop-up em um único comando?

Para mais contexto, estou usando o Ubuntu 14.04 LTS; Não tenho certeza se Gnome ou Nemo é responsável por este erro (eu sei que meu ícone de atalho de diretório "Home" invoca "nemo", mas eu tenho certeza que existem também aplicativos baseados em Gnome no sistema, há um ~/.gnome e o diretório ~/.gnome2, etc., então pode ser o Gnome).

8
Michael Aaron Safyan

Então você tem isso:

Unable to mount Pixel

O gerenciador de arquivos está apresentando essas mensagens de erro, que vêm de GVfs , que está retransmitindo informações de libmtp .

Impedindo pop-ups de erro do Gerenciador de Arquivos

Infelizmente, ainda não descobri uma maneira de suprimir os pop-ups de erro no gerenciador de arquivos GNOME/MATE/Cinnamon. Talvez um dia eu olhe no código-fonte para ver onde o erro pode ser desativado ou interceptado.

Como não tenho resposta para isso, vamos para a próxima melhor opção aceitável, que é…

Fechando pop-ups do Gerenciador de arquivos por comando

Aqui está um script que pode ser usado para limpar os pop-ups no GNOME, MATE e Cinnamon:

#!/bin/bash

function list_empty_windows() {
  wmctrl -lp | awk "{if(\$5==\"\"){print\$3,\$1}}"
}

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

Se você quiser um comando fácil de lembrar, eles fecharão todas as janelas do gerenciador de arquivos e farão com que sua área de trabalho reinicie o gerenciador de arquivos:

  • GNOME: killall nautilus
  • MATE: killall caja
  • Canela: killall nemo

Desativando a montagem automática do Google Pixel

Não parece haver uma maneira de lembrar de ignorar apenas o Google Pixel.

Não recomendo isso e não testei isso sozinho, mas para destacar o Google Pixel, talvez seja necessário comentar o fornecedor 18d1 product 4ee1 (Google Pixel) e o fornecedor 18d1 product 4ee2 (depuração do Google Pixel) no udev regras e hwdb.

Você pode encontrar os registros com este comando:

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

Depois de comentar os registros do udev do Google Pixel, talvez seja necessário reiniciar o ambiente da área de trabalho, reinicializar e/ou executar uma combinação dos seguintes comandos:

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

Novamente, isso não foi testado, e eu não recomendo isso, especialmente porque, para montar o Google Pixel novamente, é necessário desfazer as alterações manuais do udev.


Explicação

De acordo com /var/log/syslog, o GNOME está mostrando o erro porque o dispositivo USB desapareceu na segunda tentativa de inicializá-lo:

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]'

No exemplo acima, o GVfs através da libmtp identificou o dispositivo 096 do barramento USB 003 como o dispositivo do Google Pixel, mas o dispositivo do Google Pixel já havia se desconectado. Na próxima vez que o Google Pixel for reconectado, o Linux terá atribuído um novo ID de dispositivo.

libmtp erros porque ainda está tentando trabalhar com o dispositivo que desapareceu. O GVfs pega o erro e o encaminha para os Arquivos GNOME ou algum outro gerenciador de arquivos baseado no GNOME.

Quem está com defeito?

Com base no que descobri, eles têm espaço para melhorias:

libmtp

o libmtp é provavelmente o mais responsável por causar esse problema.

Ele deve melhorar o tratamento de erros quando um dispositivo MTP estiver conectado e desconectado de repente. O erro só deve ser passado se o dispositivo ainda existir. Se o dispositivo USB não existir, é inútil tentar redefini-lo.

Relatar problemas para libmtp

Android

O Android pode melhorar sua implementação de MTP para que ele não seja desconectado imediatamente após a conexão com um computador.

Relatar problemas ao Android

Nautilus/Caja/Nemo

Seria legal se esses softwares oferecessem uma preferência para suprimir mensagens de erro ou exibi-las de maneira menos pop-up.

Relatar problemas ao GNOME
Relatar problemas para MATE Caja
Relatar problemas ao Linux Mint Nemo

6
Deltik

Eu tenho uma solução alternativa para isso em Nemo:

Vá para Editar> Preferências> Comportamento e em Manuseio de mídia desmarque "Montar automaticamente mídia removível quando inserido e na inicialização".

Quando terminar de carregar seu telefone, você poderá reativar a opção de retomar o comportamento padrão.

4
Telmo Henrique Valverde
Sudo apt-get install mtp-tools mtpfs

Executar este comando instalará as ferramentas necessárias e o erro não será exibido. Uma reinicialização completa pode ser necessária.

1
Logan

uma solução mais simples é configurar o telefone para apresentar ao computador como um dispositivo midi em vez de mtp, ptp ou qualquer outra coisa.

Você pode precisar Android 8, eu posso fazer isso no meu oneplus3t

Isso impede que o nautilus se envolva, mas é desfeito rapidamente quando você deseja compartilhar o arquivo.

0
Amias

Uma coisa que você pode tentar é mudar como Android lida com a porta USB do dispositivo. A partir do Marshmallow (Android 6.0), a configuração padrão da porta USB era apenas para carregar e alterar que você precisaria tocar na barra de notificação e depois na notificação para alterá-la para outros usos.
A primeira coisa que você precisa fazer é ativar o modo de desenvolvedor.
Para fazer isso, abra Configurações - Sobre o telefone, role para baixo até ver Número da compilação e, em seguida, toque nele 7 vezes para ativar o Modo de desenvolvedor.
Você verá uma pequena mensagem dizendo que agora é desenvolvedor depois de concluir as etapas na ordem correta.

Agora, com o modo de desenvolvedor ativado, você verá um novo item de menu no menu de configurações chamado 'Opções do desenvolvedor', toque nele e role para baixo até ver Configuração USB e, em seguida, toque nele.
Em seguida, você será apresentado a uma janela na qual poderá especificar o comportamento padrão da porta USB ao conectar um cabo a ela. Você terá as opções de cobrança, MTP, PTP e outros protocolos compatíveis com o seu dispositivo.

0
Roy Smith