Add FuseRootReportMaxFree option
Add an option to allow effectively disable file system space checks for some file managers before copying files to remote drives. This is a temporary solution. A better solution is to provide each remote drive with its own mountpoint, so that the xrdp FUSE filesystem becomes POSIX compliant.
This commit is contained in:
@@ -52,6 +52,7 @@ AM_CONDITIONAL(MACOS, [test "x$macos" = xyes])
|
|||||||
AC_CHECK_SIZEOF([int])
|
AC_CHECK_SIZEOF([int])
|
||||||
AC_CHECK_SIZEOF([long])
|
AC_CHECK_SIZEOF([long])
|
||||||
AC_CHECK_SIZEOF([void *])
|
AC_CHECK_SIZEOF([void *])
|
||||||
|
AC_CHECK_SIZEOF([fsblkcnt_t],,[#include <sys/statvfs.h>])
|
||||||
|
|
||||||
# runstatedir not available for autoconf <= 2.69
|
# runstatedir not available for autoconf <= 2.69
|
||||||
if test "x$runstatedir" = "x" ; then
|
if test "x$runstatedir" = "x" ; then
|
||||||
|
|||||||
@@ -467,6 +467,22 @@ GNOME 3 versions later than 3.29.92. Do not use this for any other reason.
|
|||||||
This setting will be removed in a later version of xrdp, when GNOME 3 is
|
This setting will be removed in a later version of xrdp, when GNOME 3 is
|
||||||
no longer supported.
|
no longer supported.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
\fBFuseRootReportMaxFree\fR=\fI[false|true]\fR
|
||||||
|
The existing FUSE implementation reports free space on remote drives
|
||||||
|
in a way which can confuse some file managers if they check for free
|
||||||
|
space at the FUSE mountpoint before copying files. KDE Dolphin is
|
||||||
|
affected by this, and will report 'no space available' when trying to
|
||||||
|
copy to remote drives.
|
||||||
|
|
||||||
|
Setting this option will cause the FUSE fileystem to report a
|
||||||
|
very large amount of free space for the root of the FUSE mountpoint.
|
||||||
|
This will allow Dolphin to copy files to remote drives, but introduces
|
||||||
|
a risk that the remote filesystem will run out of space during the copy.
|
||||||
|
|
||||||
|
This setting will be removed in a later version of xrdp, when remote drives
|
||||||
|
receive unique mountpoints.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fBSoundNumSilentFramesAAC\fR=\fInumber\fR
|
\fBSoundNumSilentFramesAAC\fR=\fInumber\fR
|
||||||
Sets the \fInumber\fR of silent frames which are sent to client before close
|
Sets the \fInumber\fR of silent frames which are sent to client before close
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
#define DEFAULT_FUSE_DIRECT_IO 0
|
#define DEFAULT_FUSE_DIRECT_IO 0
|
||||||
#define DEFAULT_FILE_UMASK 077
|
#define DEFAULT_FILE_UMASK 077
|
||||||
#define DEFAULT_USE_NAUTILUS3_FLIST_FORMAT 0
|
#define DEFAULT_USE_NAUTILUS3_FLIST_FORMAT 0
|
||||||
|
#define DEFAULT_FUSE_ROOT_REPORT_MAX_FREE 0
|
||||||
#define DEFAULT_NUM_SILENT_FRAMES_AAC 4
|
#define DEFAULT_NUM_SILENT_FRAMES_AAC 4
|
||||||
#define DEFAULT_NUM_SILENT_FRAMES_MP3 2
|
#define DEFAULT_NUM_SILENT_FRAMES_MP3 2
|
||||||
#define DEFAULT_MSEC_DO_NOT_SEND 1000
|
#define DEFAULT_MSEC_DO_NOT_SEND 1000
|
||||||
@@ -252,6 +253,10 @@ read_config_chansrv(log_func_t logmsg,
|
|||||||
{
|
{
|
||||||
cfg->use_nautilus3_flist_format = g_text2bool(value);
|
cfg->use_nautilus3_flist_format = g_text2bool(value);
|
||||||
}
|
}
|
||||||
|
else if (g_strcasecmp(name, "FuseRootReportMaxFree") == 0)
|
||||||
|
{
|
||||||
|
cfg->fuse_root_report_max_free = g_text2bool(value);
|
||||||
|
}
|
||||||
else if (g_strcasecmp(name, "SoundNumSilentFramesAAC") == 0)
|
else if (g_strcasecmp(name, "SoundNumSilentFramesAAC") == 0)
|
||||||
{
|
{
|
||||||
cfg->num_silent_frames_aac = strtoul(value, NULL, 0);
|
cfg->num_silent_frames_aac = strtoul(value, NULL, 0);
|
||||||
@@ -339,6 +344,7 @@ new_config(void)
|
|||||||
cfg->fuse_direct_io = DEFAULT_FUSE_DIRECT_IO;
|
cfg->fuse_direct_io = DEFAULT_FUSE_DIRECT_IO;
|
||||||
cfg->file_umask = DEFAULT_FILE_UMASK;
|
cfg->file_umask = DEFAULT_FILE_UMASK;
|
||||||
cfg->use_nautilus3_flist_format = DEFAULT_USE_NAUTILUS3_FLIST_FORMAT;
|
cfg->use_nautilus3_flist_format = DEFAULT_USE_NAUTILUS3_FLIST_FORMAT;
|
||||||
|
cfg->fuse_root_report_max_free = DEFAULT_FUSE_ROOT_REPORT_MAX_FREE;
|
||||||
cfg->num_silent_frames_aac = DEFAULT_NUM_SILENT_FRAMES_AAC;
|
cfg->num_silent_frames_aac = DEFAULT_NUM_SILENT_FRAMES_AAC;
|
||||||
cfg->num_silent_frames_mp3 = DEFAULT_NUM_SILENT_FRAMES_MP3;
|
cfg->num_silent_frames_mp3 = DEFAULT_NUM_SILENT_FRAMES_MP3;
|
||||||
cfg->msec_do_not_send = DEFAULT_MSEC_DO_NOT_SEND;
|
cfg->msec_do_not_send = DEFAULT_MSEC_DO_NOT_SEND;
|
||||||
@@ -446,6 +452,8 @@ config_dump(struct config_chansrv *config)
|
|||||||
g_writeln(" FileMask: 0%o", config->file_umask);
|
g_writeln(" FileMask: 0%o", config->file_umask);
|
||||||
g_writeln(" Nautilus 3 Flist Format: %s",
|
g_writeln(" Nautilus 3 Flist Format: %s",
|
||||||
g_bool2text(config->use_nautilus3_flist_format));
|
g_bool2text(config->use_nautilus3_flist_format));
|
||||||
|
g_writeln(" FuseRootReportMaxFree: %s",
|
||||||
|
g_bool2text(config->fuse_root_report_max_free));
|
||||||
g_writeln(" LogFilePath : %s",
|
g_writeln(" LogFilePath : %s",
|
||||||
(config->log_file_path[0]) ? config->log_file_path : "<default>");
|
(config->log_file_path[0]) ? config->log_file_path : "<default>");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ struct config_chansrv
|
|||||||
/** Whether to use nautilus3-compatible file lists for the clipboard */
|
/** Whether to use nautilus3-compatible file lists for the clipboard */
|
||||||
int use_nautilus3_flist_format;
|
int use_nautilus3_flist_format;
|
||||||
|
|
||||||
|
/** Whether to report max free space for the FUSE mountpoint */
|
||||||
|
int fuse_root_report_max_free;
|
||||||
|
|
||||||
/** Number of silent frames to send before SNDC_CLOSE is sent, setting from sesman.ini */
|
/** Number of silent frames to send before SNDC_CLOSE is sent, setting from sesman.ini */
|
||||||
unsigned int num_silent_frames_aac;
|
unsigned int num_silent_frames_aac;
|
||||||
unsigned int num_silent_frames_mp3;
|
unsigned int num_silent_frames_mp3;
|
||||||
|
|||||||
@@ -2791,6 +2791,22 @@ static void xfuse_cb_statfs(fuse_req_t req, fuse_ino_t ino)
|
|||||||
{
|
{
|
||||||
/* specified file is a local resource */
|
/* specified file is a local resource */
|
||||||
struct statvfs vfs_stats = {0};
|
struct statvfs vfs_stats = {0};
|
||||||
|
if (g_cfg->fuse_root_report_max_free)
|
||||||
|
{
|
||||||
|
// Report an 95% free max-size filesystem
|
||||||
|
vfs_stats.f_bsize = 0x1000;
|
||||||
|
vfs_stats.f_frsize = vfs_stats.f_bsize;
|
||||||
|
#if SIZEOF_FSBLKCNT_T < 8
|
||||||
|
vfs_stats.f_blocks = (fsblkcnt_t) -1;
|
||||||
|
#else
|
||||||
|
// Max-size is taken from XFS (8 * 2^60 bytes). Using -1
|
||||||
|
// as a value does not work here.
|
||||||
|
vfs_stats.f_blocks = (fsblkcnt_t)8 * 0x10000 * 0x10000 * 0x10000;
|
||||||
|
#endif
|
||||||
|
vfs_stats.f_bfree = vfs_stats.f_blocks - vfs_stats.f_blocks / 20;
|
||||||
|
vfs_stats.f_bavail = vfs_stats.f_bfree;
|
||||||
|
vfs_stats.f_namemax = XFS_MAXFILENAMELEN;
|
||||||
|
}
|
||||||
fuse_reply_statfs(req, &vfs_stats);
|
fuse_reply_statfs(req, &vfs_stats);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -200,6 +200,9 @@ FileUmask=077
|
|||||||
; and up, and you wish to cut-paste files between Nautilus and Windows. Do
|
; and up, and you wish to cut-paste files between Nautilus and Windows. Do
|
||||||
; not use this setting for GNOME 4, or other file managers
|
; not use this setting for GNOME 4, or other file managers
|
||||||
#UseNautilus3FlistFormat=true
|
#UseNautilus3FlistFormat=true
|
||||||
|
; Uncomment this line if your file manager erroneously reports
|
||||||
|
; 'No free space' when trying to copy any files to remote drives.
|
||||||
|
#FuseRootReportMaxFree=true
|
||||||
; sound redirection
|
; sound redirection
|
||||||
; workaround for Microsoft mstsc.exe to suppress noise.
|
; workaround for Microsoft mstsc.exe to suppress noise.
|
||||||
; SoundNumSilentFramesAAC | SoundNumSilentFramesMP3 silent frames are sent before SNDC_CLOSE is sent.
|
; SoundNumSilentFramesAAC | SoundNumSilentFramesMP3 silent frames are sent before SNDC_CLOSE is sent.
|
||||||
|
|||||||
Reference in New Issue
Block a user