Mullvad VPN
Privacy is a universal right.
You have a right to privacy.
In a society increasingly determined to erode that right, a fast, trustworthy and easy-to-use VPN is a good first step toward reclaiming it.
-
1
derived packages
- Download package
-
Checkout Package
osc -A https://api.opensuse.org checkout home:nuklly/mullvadvpn && cd $_ - Create Badge
Refresh
Source Files
| Filename | Size | Changed |
|---|---|---|
| 0001-commit-date.patch | 0000000954 954 Bytes | |
| MullvadVPN-2025.9_x86_64.rpm | 0093122013 88.8 MB | |
| MullvadVPN-2025.9_x86_64.rpm.asc | 0000000833 833 Bytes | |
| _constraints | 0000000597 597 Bytes | |
| _service | 0000000499 499 Bytes | |
| cargo-config | 0000000559 559 Bytes | |
| mullvadvpn-app-vendor.tar.gz | 0114934619 110 MB | |
| mullvadvpn.changes | 0000004037 3.94 KB | |
| mullvadvpn.spec | 0000006054 5.91 KB | |
| relays.json | 0000703100 687 KB | |
| wireguard-vendor.tar.gz | 0001733365 1.65 MB |
Comments 16
Build the daemon and CLI tool from (vendored) source, and use pre-built GUI electron application. Do not build flatpak/AppImage because the daemon requires sudo permission and systemd service.
2022.5 is out
thank you!
2023.5 is out. I tried to build it according to your spec file, but I always get an error when updating the shadowsocks library from github and I do not know how to fix that. The package itself compiles fine in my environment.
The error is: + cargo build --release Updating git repository
https://github.com/mullvad/shadowsocks-rusterror: failed to select a version for the requirementonce_cell = "^1.13"(locked to 1.18.0) candidate versions found which didn't match: 1.13.0 location searched: directory source/home/XXXX/rpmbuild/BUILD/mullvadvpn-app-2023.4/vendor(which is replacing registrycrates-io) required by packagemullvad-api v0.0.0 (/home/XXXX/rpmbuild/BUILD/mullvadvpn-app-2023.4/mullvad-api)perhaps a crate was updated and forgotten to be re-vendored?However, thank you for providing this!
Upgraded to 2023.5. Enjoy!
Thx a lot!
Hi,
First let me thank you. The gui doesn't seem to display any content after recent major system update. After reinstalling mullvad it does work as normal but doesn't survive a reboot. The gui's content is ''blank'' again. Running 2023.5 on tumbleweed. Any idea's?
Greetings
It works on my desktop, so I am not sure why it doesn't show on your environment. I am sorry, but the goal of this repo is for personal use, not for making it work on any environment in Tumbleweed.
Is it GNOME or KDE? I am using KDE Plasma+Wayland. Clearing the cache at
$HOME/.cache/Mullvad VPNmight also make it work.It always worked! Gnome+wayland here. There is a cache dir in: /home/magician/.config/Mullvad VPN/Cache
And the new version of mullvad has the same problem.
Do you mean that the prebuilt binary rpm downloaded from https://github.com/mullvad/mullvadvpn-app has the same problem? If so, it means it is an upstream problem, not packaging issue.
Installed it from this repo:
https://download.opensuse.org/repositories/home:/nuklly/openSUSE_Tumbleweed/
obs://build.opensuse.org/home:nuklly
Deleted this dir:
/home/magician/.config/Mullvad VPN
Reinstalled 2023.5beta1 with yast software management.
Now it works again.
Hi!
Are you also experiencing lower or very low response time / speed lately?
For me it is strange, the servers in my country are a lot slower lately, but if I connect randomly, some of the other servers work better.
Thanks!
Thank you for this package and your work!
On an SELinux setup, the new default for Tumbleweed installs, this package (App version 2025.5) will not work.
I am by no means an expert, but I had to make a new SEpolicy with the info below and the basics appear to work fine (VPN connect/disconnect and Lockdown mode).
module my-tokioruntimew 1.0; require { type http_port_t; type kernel_t; type net_conf_t; type init_t; type monopd_port_t; type unreserved_port_t; type commplex_link_port_t; type tun_tap_device_t; class tcp_socket name_connect; class netlink_generic_socket { create read write }; class rawip_socket { create setopt write }; class icmp_socket { create getattr read setopt write }; class tun_socket create; class chr_file { ioctl open read write }; class file write; class system module_request; } #============= init_t ============== #!!!! This avc is allowed in the current policy allow init_t commplex_link_port_t:tcp_socket name_connect; #!!!! This avc is allowed in the current policy allow init_t http_port_t:tcp_socket name_connect; #!!!! This avc is allowed in the current policy allow init_t kernel_t:system module_request; #!!!! This avc is allowed in the current policy allow init_t monopd_port_t:tcp_socket name_connect; #!!!! This avc is allowed in the current policy allow init_t net_conf_t:file write; #!!!! This avc is allowed in the current policy allow init_t self:icmp_socket { create getattr read setopt write }; #!!!! This avc is allowed in the current policy allow init_t self:netlink_generic_socket { create read write }; #!!!! This avc is allowed in the current policy allow init_t self:rawip_socket { create setopt write }; #!!!! This avc is allowed in the current policy allow init_t self:tun_socket create; #!!!! This avc is allowed in the current policy #!!!! This av rule may have been overridden by an extended permission av rule allow init_t tun_tap_device_t:chr_file { ioctl open read write }; #!!!! This avc is allowed in the current policy allow init_t unreserved_port_t:tcp_socket name_connect;I don't mean to impose and am not asking for you do anything further as this is just a personal project for you. Just wanted to share in case someone runs into a similar issue.
Thanks again.
@JB231 would you kindly elaborate on what you did to add this policy? apparently i know even less about SEpolicy. XD
After you have installed this Mullvad VPN package, you need to start/enable the Mullvad daemon so it starts and persists between reboots for the app to function:
1.)
sudo systemctl enable mullvad-daemon2.)
sudo systemctl start mullvad-daemonThen if using SELinux, you have to make a new policy and load it.
1.) Open terminal and type:
nano my-tokioruntimew.te2.) Put the following content into the file and save:
module my-tokioruntimew 1.0; require { type http_port_t; type kernel_t; type net_conf_t; type init_t; type monopd_port_t; type unreserved_port_t; type commplex_link_port_t; type tun_tap_device_t; class tcp_socket name_connect; class netlink_generic_socket { create read write }; class rawip_socket { create setopt write }; class icmp_socket { create getattr read setopt write }; class tun_socket create; class chr_file { ioctl open read write }; class file write; class system module_request; } #============= init_t ============== #!!!! This avc is allowed in the current policy allow init_t commplex_link_port_t:tcp_socket name_connect; #!!!! This avc is allowed in the current policy allow init_t http_port_t:tcp_socket name_connect; #!!!! This avc is allowed in the current policy allow init_t kernel_t:system module_request; #!!!! This avc is allowed in the current policy allow init_t monopd_port_t:tcp_socket name_connect; #!!!! This avc is allowed in the current policy allow init_t net_conf_t:file write; #!!!! This avc is allowed in the current policy allow init_t self:icmp_socket { create getattr read setopt write }; #!!!! This avc is allowed in the current policy allow init_t self:netlink_generic_socket { create read write }; #!!!! This avc is allowed in the current policy allow init_t self:rawip_socket { create setopt write }; #!!!! This avc is allowed in the current policy allow init_t self:tun_socket create; #!!!! This avc is allowed in the current policy #!!!! This av rule may have been overridden by an extended permission av rule allow init_t tun_tap_device_t:chr_file { ioctl open read write }; #!!!! This avc is allowed in the current policy allow init_t unreserved_port_t:tcp_socket name_connect;3.) Run the commands below to make the policy module:
checkmodule -M -m -o my-tokioruntimew.mod my-tokioruntimew.tesemodule_package -o my-tokioruntimew.pp -m my-tokioruntimew.mod4.) Load the newly made my-tokioruntimew.pp policy:
sudo semodule -i my-tokioruntimew.ppThe app should be functional now.