workspaces-images icon indicating copy to clipboard operation
workspaces-images copied to clipboard

Telgram Persisten Profiles Broken

Open isaacrlevin opened this issue 10 months ago • 2 comments

I noticed this yesterday as now whenever I create a new instance of Telegram, my persistence is gone. When I open the workspace, I see this

Image

For reference, here is my profile path and I can confirm the folder is being created /mnt/data/appdata/kasm/profiles/telegram2/{user_id}

I see this in the logs, not sure what the issue could be

[2025.03.09 10:56:18] Opened '/home/kasm-user/.local/share/TelegramDesktop/tdata/working' for reading, the previous Telegram Desktop launch was not finished properly :( Crash log size: 0

I have tried different container images as well as recreating the workspace multiple times, no matter what I do, the profiles don't stick

Full Logs

[2025.03.09 10:56:18] Launched version: 5011001, install beta: [FALSE], alpha: 0, debug mode: [FALSE] [2025.03.09 10:56:18] Executable dir: /opt/Telegram/, name: Telegram [2025.03.09 10:56:18] Initial working dir: /home/kasm-user/ [2025.03.09 10:56:18] Working dir: /home/kasm-user/.local/share/TelegramDesktop/ [2025.03.09 10:56:18] Command line: /opt/Telegram/Telegram --no-sandbox [2025.03.09 10:56:18] Executable path before check: /opt/Telegram/Telegram [2025.03.09 10:56:18] Logs started [2025.03.09 10:56:18] App ID: org.telegram.desktop._3e485da34fc040f9218e3891ecde1e6c [2025.03.09 10:56:18] Connecting local socket to 7ff2f35f53b89f39771f9ec197cb2685-TelegramDesktop... [2025.03.09 10:56:18] Socket connect error 0, starting server and app... [2025.03.09 10:56:18] Moved logging from '/home/kasm-user/.local/share/TelegramDesktop/log_start0.txt' to '/home/kasm-user/.local/share/TelegramDesktop/log.txt'! [2025.03.09 10:56:18] Opened '/home/kasm-user/.local/share/TelegramDesktop/tdata/working' for reading, the previous Telegram Desktop launch was not finished properly :( Crash log size: 0 [2025.03.09 10:56:18] Global devicePixelRatio: 1 [2025.03.09 10:56:18] Primary screen DPI: 96, Base: 96. [2025.03.09 10:56:18] Computed screen scale: 100 [2025.03.09 10:56:19] DevicePixelRatio: 1 [2025.03.09 10:56:19] ScreenScale: 100 [2025.03.09 10:56:19] Icon theme: ubuntu-mono-dark [2025.03.09 10:56:19] Fallback icon theme: [2025.03.09 10:56:19] Audio Info: Failed to load pipewire 0.3 stubs. [2025.03.09 10:56:19] Media Info: Type Playback, default: Dummy Output, list: { "Dummy Output" <Dummy Output> }, full list refresh: true [2025.03.09 10:56:19] Media Info: Type Capture, default: Monitor of Dummy Output, list: { "Monitor of Dummy Output" <Monitor of Dummy Output> }, full list refresh: true [2025.03.09 10:56:19] Media Error: Can't sync default device for type Camera, default: , list: { } [2025.03.09 10:56:19] Font: from ':/gui/fonts/OpenSans-Regular.ttf' loaded 'Open Sans' [2025.03.09 10:56:19] Font: from ':/gui/fonts/OpenSans-Italic.ttf' loaded 'Open Sans' [2025.03.09 10:56:19] Font: from ':/gui/fonts/OpenSans-SemiBold.ttf' loaded 'Open Sans' [2025.03.09 10:56:19] Font: from ':/gui/fonts/OpenSans-SemiBold.ttf' loaded 'Open Sans Semibold' [2025.03.09 10:56:19] Font: from ':/gui/fonts/OpenSans-SemiBoldItalic.ttf' loaded 'Open Sans' [2025.03.09 10:56:19] Font: from ':/gui/fonts/OpenSans-SemiBoldItalic.ttf' loaded 'Open Sans Semibold' [2025.03.09 10:56:19] Font: from ':/gui/fonts/Vazirmatn-UI-NL-Regular.ttf' loaded 'Vazirmatn UI NL' [2025.03.09 10:56:19] Font: from ':/gui/fonts/Vazirmatn-UI-NL-SemiBold.ttf' loaded 'Vazirmatn UI NL' [2025.03.09 10:56:19] Font: from ':/gui/fonts/Vazirmatn-UI-NL-SemiBold.ttf' loaded 'Vazirmatn UI NL SemiBold' [2025.03.09 10:56:19] OpenAL Logging Level: (not set) [2025.03.09 10:56:25] System tray available: [FALSE] [2025.03.09 10:56:27] OpenGL Profile: Compatibility. [2025.03.09 10:56:27] OpenGL Renderer: llvmpipe (LLVM 15.0.7, 128 bits) [2025.03.09 10:56:27] OpenGL Vendor: Mesa [2025.03.09 10:56:27] OpenGL Version: 4.5 (Compatibility Profile) Mesa 24.3.4 - kisak-mesa PPA [2025.03.09 10:56:27] OpenGL Extensions: GL_KHR_context_flush_control, GL_ARB_internalformat_query2, GL_ARB_shader_ballot, GL_EXT_transform_feedback, GL_KHR_no_error, GL_AMD_pinned_memory, GL_ARB_multi_bind, GL_ARB_provoking_vertex, GL_EXT_vertex_array, GL_INGR_blend_func_separate, GL_OES_EGL_image, GL_ARB_shader_image_load_store, GL_EXT_packed_pixels, GL_OES_read_format, GL_APPLE_packed_pixels, GL_ARB_transform_feedback3, GL_ARB_texture_stencil8, GL_ARB_seamless_cube_map, GL_ARB_texture_mirror_clamp_to_edge, GL_EXT_texture_sRGB_decode, GL_AMD_draw_buffers_blend, GL_ARB_vertex_array_bgra, GL_ARB_shadow, GL_ARB_texture_filter_anisotropic, GL_EXT_fog_coord, GL_EXT_packed_float, GL_EXT_texture3D, GL_NV_depth_clamp, GL_ARB_transform_feedback2, GL_EXT_texture_compression_s3tc, GL_SUN_multi_draw_arrays, GL_ARB_draw_instanced, GL_ARB_half_float_vertex, GL_EXT_texture_env_add, GL_NV_texgen_reflection, GL_EXT_blend_color, GL_ARB_get_program_binary, GL_EXT_texture_filter_minmax, GL_ARB_gl_spirv, GL_ARB_robustness, GL_ARB_fragment_program, GL_EXT_framebuffer_object, GL_NV_half_float, GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_copy_buffer, GL_ARB_gpu_shader_int64, GL_ARB_texture_rg, GL_ARB_texture_border_clamp, GL_ARB_shader_group_vote, GL_ARB_texture_storage_multisample, GL_NV_fog_distance, GL_ATI_meminfo, GL_ARB_framebuffer_sRGB, GL_EXT_blend_equation_separate, GL_EXT_draw_instanced, GL_EXT_abgr, GL_ARM_shader_framebuffer_fetch_depth_stencil, GL_EXT_multi_draw_arrays, GL_ARB_ES3_1_compatibility, GL_ARB_vertex_type_2_10_10_10_rev, GL_ARB_base_instance, GL_EXT_blend_minmax, GL_ARB_shader_storage_buffer_object, GL_ARB_shader_texture_image_samples, GL_EXT_stencil_two_side, GL_EXT_shader_framebuffer_fetch_non_coherent, GL_EXT_pixel_buffer_object, GL_ARB_instanced_arrays, GL_EXT_texture_env_combine, GL_ARB_shading_language_include, GL_ARB_gpu_shader_fp64, GL_EXT_compiled_vertex_array, GL_ARB_map_buffer_alignment, GL_ARB_ES3_compatibility, GL_EXT_subtexture, GL_AMD_seamless_cubemap_per_texture, GL_ARB_robust_buffer_access_behavior, GL_EXT_texture_shadow_lod, GL_ARB_shader_atomic_counter_ops, GL_MESA_ycbcr_texture, GL_ARB_sample_shading, GL_SGIS_texture_edge_clamp, GL_ARB_multisample, GL_ARB_framebuffer_object, GL_AMD_vertex_shader_layer, GL_ARB_texture_compression_bptc, GL_ARB_arrays_of_arrays, GL_ARB_viewport_array, GL_ARB_texture_swizzle, GL_ATI_fragment_shader, GL_ARB_compute_shader, GL_ARB_texture_storage, GL_ARB_sampler_objects, GL_ARB_direct_state_access, GL_ARB_depth_clamp, GL_ARB_derivative_control, GL_ARB_framebuffer_no_attachments, GL_EXT_gpu_program_parameters, GL_ARB_half_float_pixel, GL_ARB_texture_compression, GL_IBM_texture_mirrored_repeat, GL_EXT_memory_object_fd, GL_ARB_texture_gather, GL_ARB_multitexture, GL_NV_primitive_restart, GL_ARB_shader_clock, GL_ARB_fragment_program_shadow, GL_ARB_parallel_shader_compile, GL_EXT_copy_texture, GL_NV_texture_rectangle, GL_ARB_texture_multisample, GL_ARB_point_parameters, GL_ARB_draw_buffers_blend, GL_ARB_transform_feedback_overflow_query, GL_ARB_window_pos, GL_EXT_blend_subtract, GL_IBM_multimode_draw_arrays, GL_ARB_pipeline_statistics_query, GL_EXT_provoking_vertex, GL_OVR_multiview, GL_AMD_texture_texture4, GL_EXT_secondary_color, GL_ARB_vertex_attrib_64bit, GL_ARB_conditional_render_inverted, GL_ARB_shader_draw_parameters, GL_ARB_fragment_shader, GL_ARB_shader_subroutine, GL_ARB_texture_compression_rgtc, GL_EXT_texture_sRGB, GL_ARB_clip_control, GL_ARB_query_buffer_object, GL_ARB_explicit_uniform_location, GL_ARB_texture_float, GL_ARB_program_interface_query, GL_ARB_gpu_shader5, GL_EXT_vertex_attrib_64bit, GL_EXT_texture_shared_exponent, GL_EXT_memory_object, GL_KHR_debug, GL_ARB_compatibility, GL_NV_ES1_1_compatibility, GL_ARB_vertex_buffer_object, GL_ARB_draw_elements_base_vertex, GL_EXT_point_parameters, GL_ARB_fragment_coord_conventions, GL_SGIS_generate_mipmap, GL_ARB_texture_cube_map, GL_ARB_texture_query_lod, GL_IBM_rasterpos_clip, GL_NV_blend_square, GL_ARB_shading_language_100, GL_ARB_polygon_offset_clamp, GL_ARB_clear_texture, GL_ARB_vertex_shader, GL_ARB_texture_env_crossbar, GL_EXT_texture_mirror_clamp, GL_ARB_indirect_parameters, GL_ARB_point_sprite, GL_EXT_texture_compression_latc, GL_EXT_texture_snorm, GL_KHR_texture_compression_astc_ldr, GL_EXT_texture_env_dot3, GL_EXT_framebuffer_multisample, GL_NV_shader_atomic_float, GL_ARB_blend_func_extended, GL_EXT_EGL_sync, GL_NV_texture_env_combine4, GL_ATI_texture_float, GL_NVX_gpu_memory_info, GL_ARB_tessellation_shader, GL_EXT_texture_filter_anisotropic, GL_ARB_draw_indirect, GL_KHR_blend_equation_advanced_coherent, GL_ARB_transpose_matrix, GL_ARB_shader_texture_lod, GL_ARB_texture_query_levels, GL_ARB_texture_non_power_of_two, GL_ARB_shader_precision, GL_ARB_shading_language_packing, GL_EXT_draw_range_elements, GL_ARB_texture_buffer_range, GL_EXT_blend_func_separate, GL_EXT_rescale_normal, GL_ARB_shader_stencil_export, GL_ARB_conservative_depth, GL_ARB_invalidate_subdata, GL_ARB_explicit_attrib_location, GL_EXT_vertex_array_bgra, GL_NV_alpha_to_coverage_dither_control, GL_EXT_framebuffer_blit, GL_ARB_vertex_program, GL_EXT_texture_integer, GL_EXT_texture, GL_ARB_shader_image_size, GL_ARB_texture_buffer_object_rgb32, GL_ATI_texture_env_combine3, GL_NV_copy_depth_to_color, GL_ARB_depth_texture, GL_EXT_gpu_shader4, GL_ARB_texture_view, GL_ARB_texture_env_dot3, GL_KHR_blend_equation_advanced, GL_EXT_direct_state_access, GL_EXT_texture_edge_clamp, GL_ARB_cull_distance, GL_ARB_pixel_buffer_object, GL_ARB_enhanced_layouts, GL_MESA_pack_invert, GL_ARB_copy_image, GL_EXT_debug_label, GL_ARB_transform_feedback_instanced, GL_ARB_map_buffer_range, GL_AMD_shader_trinary_minmax, GL_ARB_draw_buffers, GL_ARB_multi_draw_indirect, GL_EXT_texture_sRGB_R8, GL_EXT_texture_storage, GL_ATI_texture_compression_3dc, GL_ATI_blend_equation_separate, GL_ARB_get_texture_sub_image, GL_EXT_shader_framebuffer_fetch, GL_EXT_shader_integer_mix, GL_ARB_shader_viewport_layer_array, GL_ATI_draw_buffers, GL_ARB_texture_env_add, GL_ARB_vertex_attrib_binding, GL_ARB_ES3_2_compatibility, GL_EXT_bgra, GL_MESA_framebuffer_flip_y, GL_EXT_texture_cube_map, GL_NV_copy_image, GL_SGIS_texture_lod, GL_EXT_timer_query, GL_AMD_multi_draw_indirect, GL_ARB_texture_barrier, GL_ARB_texture_buffer_object, GL_NV_texture_barrier, GL_AMD_conservative_depth, GL_ARB_texture_rgb10_a2ui, GL_ARB_buffer_storage, GL_EXT_shader_image_load_formatted, GL_ARB_internalformat_query, GL_OVR_multiview2, GL_ARB_compressed_texture_pixel_storage, GL_EXT_draw_buffers2, GL_ARB_clear_buffer_object, GL_EXT_texture_compression_dxt1, GL_EXT_texture_rectangle, GL_ARB_texture_cube_map_array, GL_EXT_packed_depth_stencil, GL_EXT_texture_object, GL_EXT_stencil_wrap, GL_MESA_shader_integer_functions, GL_NV_packed_depth_stencil, GL_ARB_post_depth_coverage, GL_EXT_separate_specular_color, GL_EXT_framebuffer_sRGB, GL_EXT_texture_buffer_object, GL_EXT_shadow_funcs, GL_ARB_stencil_texturing, GL_ARB_texture_mirrored_repeat, GL_AMD_query_buffer_object, GL_ANGLE_texture_compression_dxt3, GL_ARB_texture_env_combine, GL_NV_light_max_exponent, GL_3DFX_texture_compression_FXT1, GL_KHR_robust_buffer_access_behavior, GL_EXT_texture_lod_bias, GL_EXT_texture_swizzle, GL_ARB_vertex_array_object, GL_ARB_texture_filter_minmax, GL_ARB_depth_buffer_float, GL_ATI_texture_mirror_once, GL_EXT_texture_array, GL_KHR_robustness, GL_KHR_texture_compression_astc_sliced_3d, GL_MESA_window_pos, GL_ARB_ES2_compatibility, GL_ARB_shader_objects, GL_EXT_EGL_image_storage_compression, GL_ARB_occlusion_query2, GL_SGIS_texture_border_clamp, GL_ARB_shader_atomic_counters, GL_INTEL_shader_atomic_float_minmax, GL_ARB_shader_bit_encoding, GL_ARB_fragment_layer_viewport, GL_ARB_debug_output, GL_ARB_seamless_cubemap_per_texture, GL_EXT_texture_compression_rgtc, GL_MESA_texture_signed_rgba, GL_AMD_vertex_shader_viewport_index, GL_ARB_color_buffer_float, GL_ARB_separate_shader_objects, GL_AMD_shader_stencil_export, GL_ARB_timer_query, GL_EXT_texture_sRGB_RG8, GL_ARB_sync, GL_EXT_polygon_offset_clamp, GL_EXT_framebuffer_multisample_blit_scaled, GL_ARB_spirv_extensions, GL_ARB_shading_language_420pack, GL_ARB_texture_rectangle, GL_NV_conditional_render, GL_EXT_EGL_image_storage, GL_KHR_parallel_shader_compile, GL_ARB_occlusion_query, GL_ARB_uniform_buffer_object, GL_ATI_separate_stencil, GL_S3_s3tc, GL_ANGLE_texture_compression_dxt5 [2025.03.09 10:56:27] OpenGL: QOpenGLContext created, version: 4.4. [2025.03.09 10:56:27] OpenGL: [TRUE] (Window) [2025.03.09 10:56:28] Update Info: MTP is unavailable. [2025.03.09 10:56:30] Update Info: Starting loading '/home/kasm-user/.local/share/TelegramDesktop/tupdates/tlinuxupd5012002' from 0 offset. [2025.03.09 10:56:30] Update Info: Loading using HTTP from 'https://td.telegram.org/tlinux/tlinuxupd5012002'.

isaacrlevin avatar Mar 09 '25 17:03 isaacrlevin

Can confirm this is still broken. Other persistent profiles do work correctly, but here it just resets when booting the container.

goedzo avatar Oct 19 '25 08:10 goedzo

In case anyone else runs into this, there is a workaround (from Gemini):

Telegram Session Not Saving in Kasm? Here's Why and How to Fix It

Even with persistent storage enabled in your Kasm container, you're finding that you have to sign in to Telegram every time you restart it. This happens because Telegram stores its session data in a location that isn't covered by Kasm's default persistent profile, which primarily saves the user's home directory. However, you can resolve this by using Kasm's "Volume Mapping" feature to specifically target the Telegram data directory.

Here's a breakdown of why this is happening and how to configure your Kasm container to remember your Telegram session, along with how to view container logs for troubleshooting.

Why Your Telegram Session Isn't Being Saved

By default, Kasm's "Persistent Profiles" feature is designed to maintain the user's home directory within the container.[1][2] This is effective for many applications that store their settings and data there. However, the desktop version of Telegram on Linux stores its session and user data in a subdirectory located at ~/.local/share/TelegramDesktop/tdata.[3] Since this path is outside of the standard home directory folders that Kasm persists, the session data is lost each time the container is restarted.

To ensure your Telegram login is saved, you need to configure Kasm to create a persistent mapping to this specific directory.

Solution: Using Volume Mapping to Persist Telegram Data

Kasm's "Volume Mapping" feature allows you to mount a directory from the host system into a specific path within the container.[4][5] This gives you granular control over which data is preserved across sessions.

Here's how to set up a volume mapping for your Telegram container:

Create a Directory on the Host: First, create a directory on your Kasm host machine to store the Telegram data. For example:

code Bash download content_copy expand_less mkdir -p /opt/kasm/persistent_storage/telegram_data

Log into your Kasm UI as an administrator.

Navigate to Workspaces and select to edit your Telegram workspace.

In the "Volume Mappings" field, you will enter a JSON configuration to map the host directory to the Telegram data directory inside the container. Paste the following into the field:

{ "/opt/kasm/persistent_storage/telegram_data": { "bind": "/home/kasm-user/.local/share/TelegramDesktop", "uid": 1000, "gid": 1000, "mode": "rw" } }

/opt/kasm/persistent_storage/telegram_data: This is the path on your Kasm host that you created in step 1.

bind: This specifies the destination path inside the container.

Save the Workspace configuration.

Now, when you start a new session for this Telegram workspace, Kasm will mount the /opt/kasm/persistent_storage/telegram_data directory from your host to /home/kasm-user/.local/share/TelegramDesktop inside the container. All of Telegram's data, including your login session, will be stored in this host directory and will persist across container restarts.

goedzo avatar Oct 19 '25 15:10 goedzo