NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
16.77k stars 13.18k forks source link

can't open files from gvfs mount #50254

Closed davidak closed 5 years ago

davidak commented 5 years ago

Issue description

I can't open files from gvfs mount with several programs.

VLC:

[davidak@X230:~]$ vlc
VLC media player 3.0.4 Vetinari (revision 3.0.4-0-gf615db6332)
[0000000001e6f690] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
[0000000001efc5d0] main playlist: playlist is empty
[00007f98f40018b0] filesystem stream error: cannot open file /run/user/1000/gvfs/smb-share:server=nas.lan,share=media/Video/Youtube/macorpc-furiabeauj-ipod.mp4 (No such file or directory)
[00007fd4040018d0] filesystem stream error: cannot open file /run/user/1000/gvfs/smb-share:server=nas.lan,share=media/Audio/Musik/Best of Chiptune January 2016.mp3 (No such file or directory)

gnome-mpv: screenshot from 2018-11-12 00-45-45

When i drag and drop the file from GNOME Files app to pantheon-terminal, i get this path, but it is not accessible.

[davidak@X230:~]$ xdg-open '/run/user/1000/gvfs/smb-share:server=nas.lan,share=media/TMP/ToData/70-640.pdf' 
xdg-open: file '/run/user/1000/gvfs/smb-share:server=nas.lan,share=media/TMP/ToData/70-640.pdf' does not exist

[davidak@X230:~]$ ls '/run/user/1000/gvfs/smb-share:server=nas.lan,share=media/TMP/ToData/70-640.pdf'
ls: cannot access '/run/user/1000/gvfs/smb-share:server=nas.lan,share=media/TMP/ToData/70-640.pdf': No such file or directory

[davidak@X230:~]$ ls -la '/run/user/1000/gvfs/'
total 0
dr-x------  2 davidak users   0 20. Okt 01:30 .
drwx------ 10 davidak users 240 12. Nov 00:23 ..

When i copy the file to my local disk i can open it.

Steps to reproduce

see above

Technical details

I'm using GNOME3 as DE, see complete config at https://github.com/davidak/nixos-config/blob/master/machines/thinkpad_X230/configuration.nix

buckley310 commented 5 years ago

I noticed this as well

48665

timbess commented 5 years ago

I got it to work by running pkill gvfsd.

I noticed that after I did that nautilus actually shows results under "Networks" when it didn't before... this is strange.

buckley310 commented 5 years ago

Since the upgrade to 18.09, I have added this logon script, and this has not been an issue for me. It's a little bit cleaner than pkill: sleep 3 ; systemctl --user stop gvfs-daemon

timbess commented 5 years ago

For what it's worth I switched to KDE and the issue is mostly gone. So it must be related specifically to the Gnome setup.

buckley310 commented 5 years ago

Yeah, I believe KDE uses KIO rather than GVFS.

timbess commented 5 years ago

That's correct. I wonder if most NixOS users just use KDE. As it turns out I ended up really liking KDE, and now I'm switching all my computers over to that! haha.

davidak commented 5 years ago

@tdbgamer i don't like KDE, lol.

There are probably also many tiling window manager users.

jtojnar commented 5 years ago

How are you creating the mount point? Is Nautilus able to access it?

buckley310 commented 5 years ago

Whenever I connect to a network share in nautilus, nautilus should create a mount point inside of "/run/user/[UID]/gvfs/". This bug results in the mountpoint not being created. when the mountpoint is missing, only gvfs-aware programs (gedit, totem) can access the network share, and non-gvfs-aware programs (cat, vlc, vscode) cannot.

jtojnar commented 5 years ago

Hmm, can confirm the issue, will do more debugging.

$ gio mount --list
Drive(0): VirtIO Disk
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Drive(1): Floppy Drive
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
  Volume(0): Floppy Disk
    Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Drive(2): QEMU DVD-ROM
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Mount(0): jtojnar on localhost -> ftp://jtojnar@localhost/
  Type: GDaemonMount

$ mount | grep gvfs
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=100)

$ ps aux | grep gvfs
jtojnar   1011  0.0  0.3 408312  7352 ?        Ssl  13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfsd
jtojnar   1016  0.0  0.3 427784  7656 ?        Sl   13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
jtojnar   1098  0.0  0.5 446224 10760 ?        Ssl  13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfs-udisks2-volume-monitor
jtojnar   1122  0.0  0.3 390272  6164 ?        Ssl  13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfs-mtp-volume-monitor
jtojnar   1126  0.0  0.2 388192  5424 ?        Ssl  13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfs-goa-volume-monitor
jtojnar   1130  0.0  0.3 403036  6432 ?        Ssl  13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfs-gphoto2-volume-monitor
jtojnar   1134  0.0  0.3 490948  7276 ?        Ssl  13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfs-afc-volume-monitor
jtojnar   1346  0.0  0.4 495808  9168 ?        Sl   13:48   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfsd-trash --spawner :1.3 /org/gtk/gvfs/exec_spaw/0
jtojnar   1555  0.0  0.4 495932  9096 ?        Sl   13:49   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfsd-network --spawner :1.3 /org/gtk/gvfs/exec_spaw/1
jtojnar   1573  0.0  0.6 683804 13244 ?        Sl   13:49   0:00 /nix/store/siddx2x2qyq00fbx33hwjc85f5bmr46y-gvfs-1.38.1/libexec/gvfsd-ftp --spawner :1.3 /org/gtk/gvfs/exec_spaw/3
jtojnar   1630  0.0  0.1 133432  2220 pts/1    S+   13:54   0:00 grep gvfs

$ ls -la /run/user/1000/gvfs
total 0
dr-x------  2 jtojnar users   0 Feb  1 13:48 .
drwx------ 11 jtojnar users 280 Feb  1 13:48 ..
jtojnar commented 5 years ago

I guess this might have something to do with the issue:

$ journalctl -u gvfs-daemon --user -b
-- Logs begin at Sat 2019-01-19 01:26:34 UTC, end at Fri 2019-02-01 14:24:08 UTC. --
Feb 01 13:48:03 nixos systemd[968]: Starting Virtual filesystem service...
Feb 01 13:48:03 nixos systemd[968]: Started Virtual filesystem service.
Feb 01 13:48:03 nixos .gvfsd-fuse-wra[1016]: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
Feb 01 13:48:03 nixos .gvfsd-fuse-wra[1016]: g_volume_monitor_get_mounts: assertion 'G_IS_VOLUME_MONITOR (volume_monitor)' failed
Feb 01 13:48:03 nixos .gvfsd-fuse-wra[1016]: invalid (NULL) pointer instance
Feb 01 13:48:03 nixos .gvfsd-fuse-wra[1016]: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
Feb 01 13:48:03 nixos .gvfsd-fuse-wra[1016]: invalid (NULL) pointer instance
Feb 01 13:48:03 nixos .gvfsd-fuse-wra[1016]: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
Feb 01 14:21:29 nixos .gvfsd-fuse-wra[1016]: invalid (NULL) pointer instance
Feb 01 14:21:29 nixos .gvfsd-fuse-wra[1016]: g_signal_handlers_disconnect_matched: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
Feb 01 14:21:29 nixos .gvfsd-fuse-wra[1016]: invalid (NULL) pointer instance
Feb 01 14:21:29 nixos .gvfsd-fuse-wra[1016]: g_signal_handlers_disconnect_matched: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
Feb 01 14:21:29 nixos .gvfsd-fuse-wra[1016]: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
Feb 01 14:23:03 nixos systemd[968]: Stopping Virtual filesystem service...
Feb 01 14:23:03 nixos systemd[968]: Stopped Virtual filesystem service.
Feb 01 14:23:11 nixos systemd[968]: Starting Virtual filesystem service...
Feb 01 14:23:11 nixos systemd[968]: Started Virtual filesystem service.
jtojnar commented 5 years ago

With the following configuration

{ pkgs, ... }: {
  environment.systemPackages = with pkgs; [
    gdb
  ];

  services.xserver = {
    enable = true;
    displayManager.gdm.enable = true;
    desktopManager.gnome3.enable = true;
  };

  systemd.coredump.enable = true;

  systemd.user.services.gvfs-daemon.serviceConfig.Environment = [
    "G_MESSAGES_DEBUG=all"
    "G_DEBUG=fatal_warnings"
  ];

  environment.enableDebugInfo = true;

  nixpkgs.overlays = [
    (self: super: {
      gnome3 = super.gnome3.overrideScope' (gself: gsuper: {
        gvfs = ((super.enableDebugging gsuper.gvfs).override {
          glib = (super.enableDebugging super.glib).overrideAttrs (attrs: {
            mesonBuildType = "debug";
          });
          fuse = super.enableDebugging super.fuse;
        }).overrideAttrs (attrs: {
          mesonBuildType = "debug";
        });
      });
    })
  ];
}

I get

$ journalctl -u gvfs-daemon --user -b
-- Logs begin at Sat 2019-01-19 01:26:34 UTC, end at Fri 2019-02-01 14:46:04 UTC. --
Feb 01 14:40:32 nixos systemd[847]: Starting Virtual filesystem service...
Feb 01 14:40:32 nixos systemd[847]: Started Virtual filesystem service.
Feb 01 14:40:32 nixos .gvfsd-wrapped[1038]: posix_spawn avoided (automatic reaping requested) 
Feb 01 14:40:32 nixos .gvfsd-fuse-wra[1043]: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
Feb 01 14:40:32 nixos systemd-coredump[1058]: Process 1043 (.gvfsd-fuse-wra) of user 1000 dumped core.

$ coredumpctl gdb
[…]
(gdb) bt
#0  _g_log_abort (breakpoint=breakpoint@entry=1) at ../glib/gmessages.c:557
#1  0x00007f77fbe2afef in g_logv (log_domain=0x7f77fc1372ef "GLib-GObject", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7f77fa05b8f0) at ../glib/gmessages.c:1371
#2  0x00007f77fbe2b1ed in g_log (log_domain=log_domain@entry=0x7f77fc1372ef "GLib-GObject", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7f77fbe7b9e4 "%s: assertion '%s' failed")
    at ../glib/gmessages.c:1413
#3  0x00007f77fbe2b831 in g_return_if_fail_warning (log_domain=log_domain@entry=0x7f77fc1372ef "GLib-GObject", 
    pretty_function=pretty_function@entry=0x7f77fc13aba0 <__FUNCTION__.14304> "g_object_new_with_properties", expression=expression@entry=0x7f77fc13a260 "G_TYPE_IS_OBJECT (object_type)")
    at ../glib/gmessages.c:2762
#4  0x00007f77fc10e152 in g_object_new_with_properties (object_type=0, n_properties=0, names=names@entry=0x0, values=values@entry=0x0) at ../gobject/gobject.c:1935
#5  0x00007f77fc10ef51 in g_object_new (object_type=<optimized out>, first_property_name=first_property_name@entry=0x0) at ../gobject/gobject.c:1645
#6  0x0000000000404ed3 in vfs_init (conn=0x2443584) at ../client/gvfsfusedaemon.c:2457
#7  0x00007f77fc72115b in fuse_fs_init (fs=0x2443230, conn=0x2443584) at fuse.c:2654
#8  0x00007f77fc7252ae in do_init (req=0x7f77f4000cc0, nodeid=<optimized out>, inarg=0x7f77fcd81038) at fuse_lowlevel.c:1836
#9  0x00007f77fc7261d1 in fuse_ll_process_buf (data=0x24433f0, buf=0x7f77fa05bd70, ch=<optimized out>) at fuse_lowlevel.c:2443
#10 0x00007f77fc722e73 in fuse_do_work (data=0x2463790) at fuse_loop_mt.c:117
#11 0x00007f77fbbb9567 in start_thread (arg=0x7f77fa05c700) at pthread_create.c:463
#12 0x00007f77fb8f01ff in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
jtojnar commented 5 years ago

I opened an issue upstream https://gitlab.gnome.org/GNOME/gvfs/issues/370

jtojnar commented 5 years ago

With Ondřej’s help, I have determined that it is indeed our packaging issue.

Unlike glib’s setup hook

https://github.com/NixOS/nixpkgs/blob/0139c4ba2bb2e987da7811558765cf774151d132/pkgs/development/libraries/glib/setup-hook.sh#L23

wrapGAppsHook does not include package’s own GIO_EXTRA_MODULES:

https://github.com/NixOS/nixpkgs/blob/0139c4ba2bb2e987da7811558765cf774151d132/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh#L5

It probably should:

--- a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh
+++ b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh
@@ -30,6 +30,10 @@ wrapGAppsHook() {
     gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$prefix/share")
   fi

+  if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A $prefix/lib/gio/modules)" ] ; then
+    gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$prefix/lib/gio/modules")
+  fi
+
   for v in $wrapPrefixVariables GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do
     eval local dummy="\$$v"
     gappsWrapperArgs+=(--prefix $v : "$dummy")
If you want to fix it locally with minimum rebuilds before a proper fix is merged Change the gvfs derivation in your nixpkgs clone: ```patch --- a/pkgs/development/libraries/gvfs/default.nix +++ b/pkgs/development/libraries/gvfs/default.nix @@ -58,6 +58,10 @@ in stdenv.mkDerivation rec { doCheck = false; # fails with "ModuleNotFoundError: No module named 'gi'" doInstallCheck = doCheck; + preFixup = '' + gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$out/lib/gio/modules") + ''; + passthru = { updateScript = gnome3.updateScript { packageName = pname; ``` Or merge the following into your `configuration.nix`: ```nix { nixpkgs.overlays = [ (self: super: { gnome3 = super.gnome3.overrideScope' (gself: gsuper: { gvfs = gsuper.gvfs.overrideAttrs (attrs: { preFixup = '' gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$out/lib/gio/modules") ''; }); }); }) ]; } ```