man mpv
mpv [options] [file|URL|PLAYLIST|-]
...
--playlist=<filename>
Play files according to a playlist file (Supports some common formats.
If no format is detected, it will be treated as list
of files, separated by newline characters. Note that XML playlist
formats are not supported.)
You can play playlists directly and without this option,
however, this option disables any security mechanisms that might be
in place. You may also need this option to load plaintext files as playlist.
Решено.
Подсистема Ubuntu (WSL )не могла разрешать корпоративные и некорпоративные домены при включенном или выключенном VPN.
Исправлено.
Необходимо создать файл /etc/wsl.conf и добавить запись, чтобы отменить автоматическое создание файла resolv.conf при перезагрузке. Добавьте блок кода в /etc/wsl.conf:
[network]
generateResolvConf = false
Затем перезагрузите подсистему Ubuntu, открыв powershell от имени администратора и выполнив команду:
wsl --shutdown
Теперь пере -откройте подсистему ubuntu
используйте эти команды по порядку:
cd /etc
ls
В этом каталоге должен отображаться файл 'resolv.conf' (, который является символической ссылкой ). Ссылка теперь должна быть красной, указывая на то, что ссылка ведет в никуда. Удалите ссылку resolv.conf и создайте новый файл /etc/resolv.conf
.В новом файле resolv.conf напишите этот блок кода
search your.domain.com
nameserver x.x.x.x
nameserver x.x.x.x
nameserver y.y.y.y
Где X — адрес DNS, настроенный в адаптере Cisco Anyconnect VPN. Найдите адаптер Cisco VPN в сетевых настройках, щелкните правой кнопкой мыши адаптер Cisco VPN и выберите «Свойства», теперь выделите IPv4 и нажмите «Свойства». Затем обратите внимание на Preferred DNS и Alternate DNS и скопируйте их в файл resolv.conf.
Y — ваш обычный DNS-адрес IPv4
Теперь снова перезапустите подсистему из Powershell. ПРИМЕЧАНИЕ. :Если это не сработало, это означает, что файл resolv.conf снова был снесен подсистемой. Чтобы это работало, файл wsl.conf должен быть прочитан системой. Если не читается, попробуйте переустановить подсистему или обновиться до 20.04.
Я столкнулся с этим в последние несколько дней, и это сводило меня с ума. Решения, витающие вокруг, были НАМНОГО слишком хакерскими, на мой вкус. Я создал очень простойwsl-resolv-handler.ps1
(см. блок сценария далее в этом сообщении ), который может автоматически установить правильный порядок серверов имен, создать правильную строку поиска на основе InterfaceMetric.
По сути, вы можете установить более низкий (== более высокий приоритет )InterfaceMetric для вашего интерфейса VPN следующим образом (запустите powershell от имени администратора):
# Get a list of interfaces, Note the InterfaceIndex and InterfaceMetric for your VPN adapter
> Get-NetIpInterface
# For example, if your VPN adapter has InterfaceIndex 12, we're setting
# the InterfaceMetric to 10, making sure 10 is lower than whatever your
# WiFi or Ethernet adapter has
> Set-NetIPInterface -InterfaceIndex 12 -InterfaceMetric 10
После того, как метрики вашего интерфейса установлены -в порядке, вы можете использовать скрипт в блоке скриптов -ниже. В верхней части скрипта содержится полное объяснение того, как использовать + несколько настроек (WslDistroName и ResolvConfFile ), которые должны быть правильными.
# Before attempting to run this script, review and/or follow the
# following steps.
#
# 0. Make sure you can execute powershell scripts. Start Powershell as an
# administrator and execute:
#
# Set-ExecutionPolicy RemoteSigned
# 1. Make sure you disable wsl's broken resolv.conf handler.
# Create /etc/wsl.conf with the following 2 lines (without the pound signs):
#
# [network]
# generateResolvConf = false
#
# After that, make sure you issue a wsl.exe --shutdown.
#
# 2. Configure your WSL distro name in $WslDistroName below and make sure we're
# pointing at your resolv.conf file in $ResolvConfFile. Also make sure we can write
# to the resolv.conf file. I had to set permissions pretty broadly at 666.
#
# 3. Schedule this script with Task Scheduler:
#
# * Click Action –> Create Task…
# * Give your task a name in the General tab
# * Click on the Triggers tab and then click New…
# * In the "Begin the task" menu, choose “On an event.” Then, choose:
#
# Log: Microsoft-Windows-NetworkProfile/Operational
# Source: NetworkProfile
# Event ID: 10000
#
# * Event ID 10000 is logged when you connect to a network. Add another
# one when a disconnect would occur (Event ID 10001):
#
# Log: Microsoft-Windows-NetworkProfile/Operational
# Source: NetworkProfile
# Event ID: 10001
#
# * Go to the Conditions tab. Make sure it runs regardless of AC adapter
# connected/disconnected, peruse the other options there.
#
# * Go to the Actions tab. Add a run script action and then:
#
# Program/script: powershell.exe
# Arguments: -noprofile -file "c:\where\you\stored\wsl-resolv-handler.ps1"
#
$WslDistroName = "Debian"
$ResolvConfFile = [string]::Format("\\wsl$\{0}\etc\resolv.conf", $WslDistroName)
function Convert-To-UnixLineEndings($path) {
$oldBytes = [io.file]::ReadAllBytes($path)
if (!$oldBytes.Length) {
return;
}
[byte[]]$newBytes = @()
[byte[]]::Resize([ref]$newBytes, $oldBytes.Length)
$newLength = 0
for ($i = 0; $i -lt $oldBytes.Length - 1; $i++) {
if (($oldBytes[$i] -eq [byte][char]"`r") -and ($oldBytes[$i + 1] -eq [byte][char]"`n")) {
continue;
}
$newBytes[$newLength++] = $oldBytes[$i]
}
$newBytes[$newLength++] = $oldBytes[$oldBytes.Length - 1]
[byte[]]::Resize([ref]$newBytes, $newLength)
[io.file]::WriteAllBytes($path, $newBytes)
}
Function Pause ($message)
{
# Check if running Powershell ISE
if ($psISE)
{
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("$message")
}
else
{
Write-Host "$message" -ForegroundColor Yellow
$x = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
}
$NetworkInterfaces = Get-NetIPInterface -AddressFamily IPv4 | Where-Object ConnectionState -EQ 'Connected' | Where-Object NlMtu -LT 9001
$DNSServerAddresses = Get-DnsClientServerAddress -AddressFamily IPv4
$DNSClients = Get-DnsClient
$Entries = $NetworkInterfaces | ForEach-Object {
[PSCustomObject]@{
'InterfaceAlias' = $_.InterfaceAlias
'InterfaceIndex' = $_.InterfaceIndex
'InterfaceMetric' = $_.InterfaceMetric
'DNSServerAddresses' = ($DNSServerAddresses | Where-Object InterfaceIndex -EQ $_.InterfaceIndex | Where-Object AddressFamily -EQ 2).ServerAddresses
'DNSSuffixes' = @(($DNSClients | Where-Object InterfaceIndex -EQ $_.InterfaceIndex).ConnectionSpecificSuffix) + @(($DNSClients).ConnectionSpecificSuffixSearchList | Out-Null)
}
} | Sort-Object InterfaceMetric -Unique
$CommentLine = [string]::Format("# Generated by wsl-resolv-handler.ps1.")
Write-Output $CommentLine | Set-Content -Path $ResolvConfFile
$SearchLine = [string]::Format("search {0}", ($Entries.DNSSuffixes -join " "))
Write-Output $SearchLine | Add-Content -Path $ResolvConfFile
$Entries | ForEach-Object {
$_.DNSServerAddresses | ForEach-Object {
$NameServerLine = [string]::Format("nameserver {0}", $_)
Write-Output $NameServerLine | Add-Content -Path $ResolvConfFile
}
}
Convert-To-UnixLineEndings $ResolvConfFile
Pause "Press any key to continue..."
Сохраните приведенный выше скрипт как wsl-resolv-handler.ps1
и следуйте инструкциям в комментариях. Удачи + получайте удовольствие (примечание, этот подход должен работать с любым типом VPN или изменениями топологии сети, он будет работать без ручной глупости, если вы правильно настроите его и правильно настроите задачу в диспетчере задач Windows. Вам не нужны повышенные разрешения для запуска этого, если скрипт может писать в /etc/resolv.conf
)!
Примечание :Я также разместил этот ответ на наиболее важную проблему github для этого (существует ОГРОМНОЕ количество проблем github о неработоспособности генератора resolv.conf )здесь:https://github.com/Microsoft/WSL/issues/2884#issuecomment-928299305