2020-07-29 qutebrowser 不能播放 drm 内容的解决办法

  1. 我系统基本情况
    • 我的系统, 安装的是源里面的 nvidia 驱动
    • screenfectch 输出
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      [archlinux@myhostname ~]$ screenfetch
      -`
      .o+` archlinux@myhostname
      `ooo/ OS: Arch Linux
      `+oooo: Kernel: x86_64 Linux 5.7.7-arch1-1
      `+oooooo: Uptime: 10m
      -+oooooo+: Packages: 802
      `/:-:++oooo+: Shell: bash 5.0.17
      `/++++/+++++++: Resolution: 1920x1080
      `/++++++++++++++: DE: GNOME
      `/+++ooooooooooooo/` WM: KWin
      ./ooosssso++osssssso+` GTK Theme: Adwaita [GTK2/3]
      .oossssso-````/ossssss+` Icon Theme: Adwaita
      -osssssso. :ssssssso. Font: Cantarell 11
      :osssssss/ osssso+++. Disk: 35G / 882G (5%)
      /ossssssss/ +ssssooo/- CPU: Intel Core i7-4770K @ 8x 3.9GHz [42.0°C]
      `/ossssso+/:- -:/+osssso+- GPU: GeForce GTX 780
      `+sso+:-` `.-/+oso: RAM: 2719MiB / 7897MiB
      `++:. `-/+/
      .` `/
  • 解决办法
    1. 首先安装 chromium-widevine
    1
    [archlinux@myhostname ~]$ yaourt -S chromium-widevine
    1. 创建 /etc/pacman.d/hooks/nvidia.hook
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [archlinux@myhostname ~]$ cat /etc/pacman.d/hooks/nvidia.hook
    [Trigger]
    Operation=Install
    Operation=Upgrade
    Operation=Remove
    Type=Package
    Target=nvidia
    Target=linux
    # Change the linux part above and in the Exec line if a different kernel is used

    [Action]
    Description=Update Nvidia module in initcpio
    Depends=mkinitcpio
    When=PostTransaction
    NeedsTargets
    Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'
    1. /etc/mkinitcpio.conf 文件中的 MODULES=() 行的括号中加入 nvidia nvidia_modeset nvidia_uvm nvidia_drm , 如下所示:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      # vim:set ft=sh
      # MODULES
      # The following modules are loaded before any boot hooks are
      # run. Advanced users may wish to specify all system modules
      # in this array. For instance:
      # MODULES=(piix ide_disk reiserfs)
      MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

      # BINARIES
      # This setting includes any additional binaries a given user may
      # wish into the CPIO image. This is run last, so it may be used to
      # override the actual binaries included by a given hook
      # BINARIES are dependency parsed, so you may safely ignore libraries
      BINARIES=()

      # FILES
      # This setting is similar to BINARIES above, however, files are added
      # as-is and are not parsed in any way. This is useful for config files.
      FILES=()

      # HOOKS
      # This is the most important setting in this file. The HOOKS control the
      # modules and scripts added to the image, and what happens at boot time.
      # Order is important, and it is recommended that you do not change the
      # order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
      # help on a given hook.
      # 'base' is _required_ unless you know precisely what you are doing.
      # 'udev' is _required_ in order to automatically load modules
      # 'filesystems' is _required_ unless you specify your fs modules in MODULES
      # Examples:
      ## This setup specifies all modules in the MODULES setting above.
      ## No raid, lvm2, or encrypted root is needed.
      # HOOKS=(base)
      #
      ## This setup will autodetect all modules for your system and should
      ## work as a sane default
      # HOOKS=(base udev autodetect block filesystems)
      #
      ## This setup will generate a 'full' image which supports most systems.
      ## No autodetection is done.
      # HOOKS=(base udev block filesystems)
      #
      ## This setup assembles a pata mdadm array with an encrypted root FS.
      ## Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
      # HOOKS=(base udev block mdadm encrypt filesystems)
      #
      ## This setup loads an lvm2 volume group on a usb device.
      # HOOKS=(base udev block lvm2 filesystems)
      #
      ## NOTE: If you have /usr on a separate partition, you MUST include the
      # usr, fsck and shutdown hooks.
      HOOKS=(base udev autodetect modconf block filesystems keyboard fsck)

      # COMPRESSION
      # Use this to compress the initramfs image. By default, gzip compression
      # is used. Use 'cat' to create an uncompressed image.
      #COMPRESSION="gzip"
      #COMPRESSION="bzip2"
      #COMPRESSION="lzma"
      #COMPRESSION="xz"
      #COMPRESSION="lzop"
      #COMPRESSION="lz4"

      # COMPRESSION_OPTIONS
      # Additional options for the compressor
      #COMPRESSION_OPTIONS=()
      1. /etc/default/grub 中的第六行中加入 nvidia-drm.modeset=1, 如如下展示:
      1
      GRUB_CMDLINE_LINUX_DEFAULT="nvidia-drm.modeset=1 loglevel=3 quiet"
      1. 运行grub-mkconfig
      1
      [archlinux@myhostname ~]$ sudo grub-mkconfig -o /boot/grub/grub.cfg 
      1. 最后得注意, 在进行第三步时运行
      1
      [archlinux@myhostname ~]$ sudo mkinitcpio -P
      1. 重启, 并设置 content.headers.user_agent 参数, 在qutebrowser 中运行如下命令
      1
      :set content.headers.user_agent 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {qt_key}/{qt_version} {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}'
      1. 最后就可以在 qutebrowser 中播放 drm 内容了。

2020-07-29 qutebrowser 不能播放 drm 内容的解决办法
https://www.supermew.top/2020/07/29/qutebrowser-不能播放-drm-内容的解决办法/
作者
八月
发布于
2020年7月29日
许可协议