:information_source: GH Gist: [yermulnik/Telegram.yz.md](https://gist.github.com/yermulnik/5b1d412ca01630af4d06c2c1fadddc53) :point_right: Update this gist: ```shell gh gist edit https://gist.github.com/yermulnik/5b1d412ca01630af4d06c2c1fadddc53 -f Telegram.yz.md README.md ``` Starting with `v4.10.0` Telegram has stopped supporting Linux platforms with `glibc` (GNU C Library) less than `2.29` (`2.28`?): ```shell > strings Telegram.4.11.3 | fgrep GLIBC_2.2 | tail -1 GLIBC_2.28 ``` Linux Mint 19.3 (Tricia) [Ubuntu 18.04 LTS (Bionic Beaver)] ships with `glibc 2.27`: ```shell > strings /lib/x86_64-linux-gnu/libc.so.6 | fgrep GLIBC_2.2 | tail -1 GLIBC_2.27 ``` While modern Telegram might be installed and run by means of `snap` or `flatpak`, here's the workaround on how to run it on **Linux Mint 19.3 (Tricia)** [based on **Ubuntu 18.04 LTS (Bionic Beaver)**] w/o "shims" like snap/flatpak: * Caveats: * The below example assumes `/opt/glibc-2.29` as a destination directory for Glibc and auxiliary libs, and `/opt/Telegram.yz` as destination for patched Telegram binary. Adjust these paths if you'd like to do the things w/o `root` permissions (**which is a recommended way**). * Telegram auto-update feature won't be working, meaning you will need to execute `Download and patch Telegram binary` step each time new version of Telegram is released * The `Expat` (XML parsing C library) installation might be a hassle and is not described in this example as luckily for me it was already installed as a required dependency of something else installed via `Homebrew`: https://docs.brew.sh/Homebrew-on-Linux * Sound doesn't work. Need to figure this out (no ideas and cues yet), though I don't actually listen to audio/video on desktop version. * :warning: Workarounded this as of now by enabling external video player under experimental settings under advanced settings menu :shrug: * :cry: This breaks notification sounds :grey_question: :thinking: * Download and install Glibc `2.29`: ```shell cd /tmp/ wget -c https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz tar -zxvf glibc-2.29.tar.gz mkdir glibc-2.29/build cd glibc-2.29/build ../configure --prefix=/opt/glibc-2.29 make make install cd ../../ && rm -rf glibc-2.29.tar.gz glibc-2.29/ ``` * Provide correct Timezone knowledge to this custom installation of Glibc: ```shell ln -s /etc/localtime /opt/glibc-2.29/etc/ ``` * Link libs required by Telegram into custom Glibc's libs directory * You may need to adjust source locations of some of the libs and/or install missing libs if any * **`libexpat` may become a pain** as it's only `v2.2.5` on this box, while more modern version is required by Telegram, though happily I'm a user of `Homebrew` on Linux, that has `Expat` of version `2.5.0`) ```shell ln -s /home/linuxbrew/.linuxbrew/lib/libexpat.so.1 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libblkid.so.1 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libbsd.so.0 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libdbus-1.so.3 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libgcrypt.so.20 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libgpg-error.so.0 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/liblzma.so.5 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libmount.so.1 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libpcre.so.3 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libselinux.so.1 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libsystemd.so.0 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libuuid.so.1 /opt/glibc-2.29/lib/ ln -s /lib/x86_64-linux-gnu/libz.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libatspi.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libcairo.so.2 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libdatrie.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libepoxy.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libffi.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgdk-3.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libGLX.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/liblz4.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libpng16.so.16 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libthai.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-client.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.3.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0.0.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1.0.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-server.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.1.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libX11.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXau.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libxcb.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXcursor.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXdamage.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXext.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXfixes.so.3 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXinerama.so.1 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXi.so.6 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXrandr.so.2 /opt/glibc-2.29/lib/ ln -s /usr/lib/x86_64-linux-gnu/libXrender.so.1 /opt/glibc-2.29/lib/ ``` * Download and patch Telegram binary: ```shell mkdir /opt/Telegram.yz/ && cd /opt/Telegram.yz/ wget https://telegram.org/dl/desktop/linux -O tsetup.tar.xz tar vfx tsetup.tar.xz --strip-components=1 rm tsetup.tar.xz patchelf --set-interpreter /opt/glibc-2.29/lib/ld-linux-x86-64.so.2 --set-rpath /opt/glibc-2.29/ ./Telegram ``` * Create (or update your existing Telegram Desktop file) to use correct path: ```shell > cat ~/.local/share/applications/org.telegram.desktop._0c0ce06c94b8dbcd209b995362e84495.desktop [Desktop Entry] Name=Telegram Desktop Comment=Official desktop version of Telegram messaging app TryExec=/opt/Telegram.yz/Telegram Exec=/opt/Telegram.yz/Telegram -- %u Icon=telegram Terminal=false StartupWMClass=TelegramDesktop Type=Application Categories=Chat;Network;InstantMessaging;Qt; MimeType=x-scheme-handler/tg; Keywords=tg;chat;im;messaging;messenger;sms;tdesktop; Actions=quit; DBusActivatable=true SingleMainWindow=true X-GNOME-UsesNotifications=true X-GNOME-SingleWindow=true [Desktop Action quit] Exec=/opt/Telegram.yz/Telegram -quit Name=Quit Telegram Icon=application-exit ```