Korzystanie z pakietu Debian dla chromu

10

Od wersji Debian 9 (stretch), Debian zawiera pakiet contrib chromium-widevine. Opis tego pakietu to:

Ten pakiet zapewnia obsługę szerokiego modułu deszyfrowania treści.

Jednak po zainstalowaniu tego pakietu nie mogę znaleźć żadnego znaku, który rozpozna Chromium lub ładuje tę wtyczkę. Lokalizacja Widevine w tym pakiecie to /usr/lib/chromium/libwidevinecdmadapter.so.

Obecnie używam tego pakietu do odtwarzania Amazon Prime Video na Chromium. Obecnie pojawia się błąd:

W przeglądarce brakuje komponentu praw cyfrowych. Przejdź do chrome: // components i w WidevineCdm kliknij przycisk Sprawdź dostępność aktualizacji.

chrome: // components nie wyświetla WidevineCdm pod Chromium.

Co dziwniejsze, dostaję:

root@orwell:/usr/lib/chromium# ldd libwidevinecdmadapter.so 
        linux-vdso.so.1 (0x00007ffccbfad000)
        libwidevinecdm.so => not found
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f08c6e5b000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f08c6ad3000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f08c6733000)
        /lib64/ld-linux-x86-64.so.2 (0x000055e84bdbe000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f08c642b000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f08c6213000)

Więc libwidevinecdm.sonic nie zmienia?

Masz pomysł, co mam tutaj zrobić? Nie chromium-widevinema dokumentacji ani wskazówek, jak należy postępować.

UWAGA: To pytanie jest nieaktualne, przynajmniej od wersji Debian 10 / buster, ponieważ pakiet chrom-widevine już nie istnieje.

Faheem Mitha
źródło
jeśli w pakiecie nie ma żadnej dokumentacji, złóż raport o błędzie z tym stwierdzeniem. IMO to co najmniej „ważny” (a może nawet „poważny”) błąd poziomu ważności .
cas

Odpowiedzi:

9

Nie miałem szczęścia, używając Netflix chromium-widevinena Debianie 9.3 z repozytorium contrib. To co zrobiłem to:

wget https://dl.google.com/widevine-cdm/1.4.8.1008-linux-x64.zip
unzip 1.4.8.1008-linux-x64.zip
sudo mkdir /usr/lib/chromium
sudo mv libwidevinecdm.so /usr/lib/chromium
sudo chmod 644 /usr/lib/chromium/libwidevinecdm.so
a_z
źródło
Dla jasności, czy ten przepis działał dla Ciebie?
Faheem Mitha
1
tak, oglądam teraz Netflix na Debianie 9.3 na chromie :)
a_z
Dziękuję za potwierdzenie. Spróbuję tego podejścia. Chociaż zastanawiam się, dlaczego pakiet Debian nie działa.
Faheem Mitha
1
@FaheemMitha Ktoś zrobił bugs.debian.org/cgi-bin/bugreport.cgi?bug=921738
Braiam
3
Właśnie próbowałem tego na Mint 19.2. z Chromium 76 i nie działa niestety.
Bernd Wechner,
0

Debian stwierdza, że ​​wszystkie pakiety zawarte w oficjalnej dystrybucji są wolnym oprogramowaniem, ale biblioteki Widevine CDM nie należą do tej kategorii. Istnieje jednak binarny obiekt blob dostępny w kompilacji referencyjnej Chrome .

Lis
źródło
Jednak włączenie takiego pakietu bez odniesienia, jak go używać, nie jest zbyt przydatne. Dodałem link /usr/lib/chromium# ln -s /opt/google/chrome/libwidevinecdm.so .Teraz Prime Video nie narzeka na „brak komponentu praw cyfrowych”, ale też nie działa. Otrzymuje ten sam błąd, co sam Google Chrome, który obecnie również nie działa.
Faheem Mitha,
@FaheemMitha Chrome jest bardziej prawdopodobne, że oba będą działać. Czy masz pojęcie, dlaczego może to mieć problemy?
Fox
Cześć Fox. Nie ja nie. Działało do niedawna. Ale myślę, że były ostatnie aktualizacje.
Faheem Mitha,
0

Zaktualizowałem skrypt znaleziony w Arch Linux, aby pobrać i zainstalować Widevine w chromie. Musisz tylko zaktualizować ścieżkę do katalogu instalacyjnego chrome. Główną różnicą jest to, że zainstaluje również manifest zawarty w pobranym archiwum i w ten sposób może wyświetlić wersję widevine za pośrednictwem chrome: // components w chrome. Oto on:

#!/bin/sh

# For ARM use this instead
# https://gist.github.com/ruario/19a28d98d29d34ec9b184c42e5f8bf29

available () {
  command -v "$1" >/dev/null 2>&1
}

# Make sure we have wget or curl
if available wget; then
  SILENT_DL="wget -qO-"
  LOUD_DL="wget"
elif available curl; then
  SILENT_DL="curl -s"
  LOUD_DL="curl -O"
else
  echo "Install wget or curl" >&2
  exit 1
fi

# Set Output dir
#WIDEVINE_DIR="${WIDEVINE_INSTALL_DIR:-/opt/google/chrome}"
#WIDEVINE_DIR="${WIDEVINE_INSTALL_DIR:-/usr/lib/chromium}"
WIDEVINE_DIR="${WIDEVINE_INSTALL_DIR:-/usr/lib/chromium-browser}"

# Use the architecture of the current machine or whatever the user has set
# externally
ARCH="${ARCH:-$(uname -m)}"
case "$ARCH" in
  x86_64) WIDEVINE_ARCH="x64" 
          WIDEVINE_INSTALL_DIR="$WIDEVINE_DIR/WidevineCdm/_platform_specific/linux_x64" ;;
    i?86) WIDEVINE_ARCH="ia32" 
          WIDEVINE_INSTALL_DIR="$WIDEVINE_DIR/WidevineCdm/_platform_specific/linux_x86" ;;
    arm*) echo "For ARM use https://gist.github.com/ruario/19a28d98d29d34ec9b184c42e5f8bf29 instead" >&2 ; exit 1 ;;
       *) echo "The architecture $ARCH is not supported." >&2 ; exit 1 ;;
esac

# Set temp dir
TMP="${TMP:-/tmp}"

# Set staging dir
STAGINGDIR="$TMP/widevine-staging"

# Work out the latest Widevine version
#WIDEVINE_VERSION="${WIDEVINE_VERSION:-$($SILENT_DL https://dl.google.com/widevine-cdm/current.txt)}"
WIDEVINE_VERSION="${WIDEVINE_VERSION:-$($SILENT_DL https://dl.google.com/widevine-cdm/versions.txt | tail -n1)}"
echo latest Version: $WIDEVINE_VERSION

# Error out if $CDMVERISON is unset, e.g. because previous command failed
if [ -z "$WIDEVINE_VERSION" ]; then
  echo "Could not work out the latest version; exiting" >&2
  exit 1
fi

# Find current installed version
INSTALLED_VERSION=$(grep '"version":' $WIDEVINE_DIR/WidevineCdm/manifest.json|cut -f4 -d'"')

# Don't start repackaging if the same version is already installed
if [ $WIDEVINE_VERSION = $INSTALLED_VERSION ]; then
  echo "The latest Widevine ($WIDEVINE_VERSION) is already installed"
  exit 0
fi

# If the staging directory is already present from the past, clear it down and
# re-create it.
if [ -d "$STAGINGDIR" ]; then
  rm -fr "$STAGINGDIR"
fi

# Stop on any error
set -eu

# Make and switch to the staging directory
mkdir -p "$STAGINGDIR"
cd "$STAGINGDIR"

# Now get the latest widevine zip for the users architecture
$LOUD_DL "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip"

# Extract the contents of Widevine package
if available unzip; then
  unzip "${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip" libwidevinecdm.so
  unzip "${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip" manifest.json 
elif available bsdtar; then
  bsdtar xf "${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip" libwidevinecdm.so
  bsdtar xf "${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip" manifest.json
else
  # The user's system has no obvious handler for Zip files. GZip can extract
  # the first entry from a Zip. If libwidevinecdm.so is the first entry, we
  # might just pull this off! ;)
  missing_extractor_error () {
    echo "Install InfoZip Unzip or BSD tar" >&2
    exit 1
  }
  # Look in first 50 bytes for libwidevinecdm.so as it'll be mentioned there
  # if it is the first entry in the zip
  if head -c50 "${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip" | grep -Fq libwidevinecdm.so; then
    # Hide the warning about multiple entries and ensure an exit code of 0
    gzip -d < "${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip" > libwidevinecdm.so 2> /dev/null ||:
    # Check that it looks like an executable
    if ! file libwidevinecdm.so | grep -Fq ELF; then
      missing_extractor_error
    fi
  else
    missing_extractor_error
  fi
fi

# Add version number file
#touch "widevine-$WIDEVINE_VERSION"
#SED_PAR="s/\"version\": \".*\"/\"version\": \"$WIDEVINE_VERSION\"/"
#if [ -e $WIDEVINE_DIR/WidevineCdm/manifest.json ]; then
#  sed $WIDEVINE_DIR/WidevineCdm/manifest.json -e "$SED_PAR" >$STAGINGDIR/manifest.json
#fi

# Escalate privileges if needed and copy files into place
#SED_PAR="s/\"version\": \".*\"/\"version\": \"$WIDEVINE_VERSION\"/"
if [ "$USER" = "root" ]; then
  install -Dm644 libwidevinecdm.so "$WIDEVINE_INSTALL_DIR/libwidevinecdm.so"
  if [ -e $STAGINGDIR/manifest.json ]; then
#     mv $WIDEVINE_DIR/WidevineCdm/manifest_neu.json $WIDEVINE_DIR/WidevineCdm/manifest.json
     install -Dm644 manifest.json "$WIDEVINE_DIR/WidevineCdm/manifest.json"
  fi
elif [ -r /etc/os-release ] && grep -qxE 'ID=((ubuntu)|(debiiian))' /etc/os-release; then
  echo "Calling sudo ... If prompted, please enter your password so Widevine can be copied into place"
  sudo  install -Dm644 libwidevinecdm.so "$WIDEVINE_INSTALL_DIR/libwidevinecdm.so"
  if [ -e "$WIDEVINE_INSTALL_DIR/libwidevinecdm.so" ]; then
    if [ -e $STAGINGDIR/manifest.json ]; then
      sudo install -Dm644 manifest.json "$WIDEVINE_DIR/WidevineCdm/manifest.json"
    fi
  else
    echo "Something went wrong installing libwidevinecdm.so" >&2
    exit 1
  fi
else
  echo "Please enter your root password so Widevine can be copied into place"
  su -c "sh -c \"install -Dm644 libwidevinecdm.so $WIDEVINE_INSTALL_DIR/libwidevinecdm.so && install -Dm644 manifest.json $WIDEVINE_DIR/WidevineCdm/manifest.json\""
fi

# Tell the user we are done
echo "Widevine ($WIDEVINE_VERSION) installed into $WIDEVINE_INSTALL_DIR/"
trupf
źródło