AndroidデバイスをUSBドライブにプラグインするだけで、ファイルシステムを使用するつもりはありません(画面をオフにするか、「充電専用」モードのUSB設定を使用します)。これにより、電話でデータ接続を確立できなくなります。ただし、これを行うと、下の画像に示すポップアップのように見える非常に多くの迷惑なポップアップが頻繁に表示されます。
理想的には、これらのポップアップを最初に表示しないようにウィンドウマネージャーを構成する方法があります(自動マウントを無効にしないで、手動でマウントする必要なく、場合によってはデバイスをファイルシステムとして使用できます)。 、つまり、電話機のUSB設定が「MTP」モードであり、画面のロックが解除されている場合)。それができない場合は、このポップアップのすべてのインスタンスを(ウィンドウマネージャーの残りの部分を同時に殺すことなく)殺すために使用できる簡単なコマンドがあれば理想的です。それができない場合、この特定のデバイスの自動マウントを無効にするソリューション(すべての自動マウントを無効にすることなく)は許容できるソリューションです。
最初にこのポップアップが発生しないようにする方法、または1つのコマンドでポップアップの複数のインスタンスを強制終了する方法に関する提案はありますか?
詳細については、Ubuntu 14.04 LTSを使用しています。 GnomeとNemoのどちらがこのエラーの原因かはわかりません(「ホーム」ディレクトリのショートカットアイコンが「nemo」を呼び出すことは知っていますが、システムにGnomeベースのアプリもあることは確かですが、_~/.gnome
_および_~/.gnome2
_ディレクトリなどなので、Gnomeになる可能性があります)。
だからあなたはこれを持っています:
ファイルマネージャーは、 GVfs からのエラーメッセージを表示しています。これは、 libmtp からの情報を中継しています。
残念ながら、私はまだGNOME/MATE/Cinnamonファイルマネージャーでエラーポップアップを抑制する方法を発見していません。いつか、ソースコードを調べて、エラーを無効にしたり傍受したりできる場所を確認します。
私にはこれに対する答えがないので、次の最良の許容オプションに移りましょう。それは…
以下は、GNOME、MATE、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
簡単なコマンドを覚えておきたい場合は、これらによってファイルマネージャのすべてのウィンドウが閉じ、デスクトップでファイルマネージャが再起動されます。
killall nautilus
killall caja
killall nemo
Google Pixelだけを無視することを覚えておく方法はないようです。
これはお勧めしません。私自身もテストしていませんが、Google Pixelを選択するには、udevでベンダー18d1製品4ee1(Google Pixel)とベンダー18d1製品4ee2(Google Pixelデバッグ)をコメントアウトする必要があるかもしれませんルールとhwdb。
このコマンドでレコードを見つけることができます:
grep -ri '18d1.*4ee[12]' /lib/udev
Google Pixelのudevレコードをコメント化した後、デスクトップ環境の再起動、再起動、または次のコマンドの組み合わせの実行が必要になる場合があります。
Sudo udevadm hwdb --update
Sudo udevadm control --reload-rules
Sudo udevadm trigger
繰り返しますが、これはテストされていません。GooglePixelを再度マウントするために、手動でのudevの変更を元に戻す必要があるため、これは特にお勧めしません。
による /var/log/syslog
、2回目の初期化の試行でUSBデバイスが表示されなくなったため、GNOMEがエラーを表示しています。
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]'
上記のサンプルでは、libmtpを介したGVfsはUSBバス003デバイス096をGoogle Pixelデバイスとして識別しましたが、Google Pixelデバイスはすでに切断されています。次にGoogle Pixelが再接続するときに、Linuxは新しいデバイスIDを割り当てます。
libmtpは、表示されなくなったデバイスをまだ処理しようとしているためエラーになります。 GVfsはエラーをピックアップし、それをGNOMEファイルまたは他のGNOMEベースのファイルマネージャーに転送します。
私が発見したことに基づいて、これらには改善の余地があります:
libmtpがこの問題の原因であると考えられます。
MTPデバイスが接続され、突然切断された場合のエラー処理が改善されます。エラーが渡されるのは、デバイスがまだ存在している場合のみです。 USBデバイスが存在しない場合は、リセットしてみても意味がありません。
libmtp に問題を報告
Androidは、MTPの実装を改善して、コンピューターに接続した直後に切断されないようにすることができます。
これらのソフトウェアが、エラーメッセージを抑制したり、ポップアップの少ない方法で表示したりする設定を提供しているといいですね。
Nemoの回避策があります:
編集>設定>動作に移動し、メディア処理で「自動的に」のチェックを外します挿入時および起動時にリムーバブルメディアをマウントします。」.
スマートフォンの充電が完了したら、オプションを再度有効にしてデフォルトの動作を再開できます。
これに対するより簡単な修正は、あなたの電話をmtp、ptpなどの代わりにmidiデバイスとしてコンピュータに提示するように設定することです。
Android 8が必要な場合があります。これは私のoneplus3tで実行できます
これにより、nautilusがまったく関与しなくなりますが、ファイル共有が必要な場合はすぐに元に戻ります。
あなたが試すことができる1つのことは、AndroidがデバイスのUSBポートを処理する方法を変更することです。Marshmallow(Android 6.0)以降、USBポートのデフォルト設定は充電のみで、通知バーをタップしてから、他の用途に変更するには通知をタップする必要があります。
最初に行う必要があるのは、開発者モードを有効にすることです。
これを行うには、[設定]-[電話について]を開き、[ビルド番号]が表示されるまで下にスクロールし、7回タップするだけで開発者モードが有効になります。
正しい順序で手順を完了すると、開発者になったことを示す小さなメッセージが表示されます。
開発者モードが有効になったら、「開発者オプション」と呼ばれる設定メニューに新しいメニュー項目が表示されます。それをタップし、USB設定が表示されるまで下にスクロールして、それをタップします。
次に、ケーブルを接続したときのUSBポートのデフォルトの動作を指定できるウィンドウが表示されます。充電、MTP、PTP、およびデバイスがサポートするその他のプロトコルを選択できます。
Sudo apt-get install mtp-tools mtpfs
このコマンドを実行すると、必要なツールがインストールされ、エラーは表示されません。完全な再起動が必要になる場合があります。
私の電話(Galaxy S6)でのFWIW開発のオプションは次のとおりです。システム;上級;開発者向けオプションとデフォルトのUSB動作は表示されていませんが、「デフォルトのUSB設定」で(ファイル転送に)変更するためにアクセスできます。これにより、Nemoが開きます: ‘mtp://%5Busb%3A003,111%5D /’ == >> smiles。