По ошибке exectuted & ldquo; sudo chmod -R -x * & amp; & amp; & amp; sudo chmod -R + X * & rdquo; команда

И вот сценарий, который будет переключаться между приемниками:

http://marginalhacks.com/index.0.html#pulse-switch-out

Вот ниже:

#!/usr/bin/ruby
# Filename: pulse-switch-out
# Author:   David Ljung Madison <DaveSource.com>
# See License:  http://MarginalHacks.com/License/
# Description:  Switch pulse audio output (sink) using pacmd

PACMD = %w(pacmd)

##################################################
# Usage
##################################################
def fatal(*msg)
    msg.each { |m| $stderr.puts "[#{$0.sub(/.*\//,'')}] ERROR: #{m}" }
    exit(-1);
end

def usage(*msg)
    msg.each { |m| $stderr.puts "ERROR: #{m}" }
    $stderr.puts <<-USAGE

Usage:  #{$0.sub(/.*\//,'')} [sink]
  Switch sound playback device for ALSA/pulseaudio

    [sink]   Specify sink number to use (see 'pacmd list-sinks')

    USAGE
    exit -1;
end

def parseArgs
    opt = Hash.new
    loop {
        if (arg=ARGV.shift)==nil then break
        elsif arg == '-h' then usage
        elsif arg == '-?' then usage
        #elsif arg == '-arg' then opt[:arg] = true
        elsif arg =~ /^(\d)$/ then opt[:sink] = arg.to_i
        else
            usage("Unknown arg [#{arg}]")
        end
    }

    opt
end

# Unfortunately you can't return or break from the yield without leaving
# the pipe open, maybe use some sort of ensure and figure out how to close?
def pipe(cmd)
        # This is leaving files open
    #IO.popen(cmd.join(' ')).each { |l|
    a = `#{cmd.join(' ')}`
    ret = $?
    a.split("\n").each { |l|
        yield l
    }
    $?
end

def getSinks(ins=false)
    cmd = PACMD.dup
    cmd.push(ins ? 'list-sink-inputs' : 'list-sinks')
    curr = nil
    sinks = Array.new
    pipe(cmd) { |l|
        next unless l=~/\s*(\*)?\s*index:\s+(\d+)/
        i = $2.to_i
        sinks.push(i)
        curr = i if $1
    }
    return sinks,curr
end

##################################################
# Main code
##################################################
def main
    opt = parseArgs

    sinks,curr = getSinks

    usage("No sinks found?") if sinks.empty?
    usage("Only one sink found") if sinks.size==1

    if opt[:sink]
        usage("Unknown sink [#{opt[:sink]}] (out of #{sinks.join(' ')})") unless sinks.index(opt[:sink])
    else
        # Find next sink after curr
        opt[:sink] = sinks[0]
        sinks.each { |s|
            next unless s>curr
            opt[:sink] = s
            break
        }
    end

    # Set default sink
## For some reason this doesn't change the behavior of new apps.
    puts "Set sink: #{opt[:sink]}"
    system("#{PACMD} set-default-sink #{opt[:sink]} > /dev/null")
    usage("Couldn't set default sink [#{opt[:sink]}]") unless $?==0

    # And move all sink-inputs to the new sink
    ins,ignore = getSinks(true)
    ins.each { |i|
        puts "Move playback #{i} to sink #{opt[:sink]}"
        system("#{PACMD} move-sink-input #{i} #{opt[:sink]} > /dev/null")
        usage("Couldn't move playback #{i} to sink [#{opt[:sink]}]") unless $?==0
    }
end
main
0
задан 10 August 2017 в 13:48

2 ответа

Вы удалили права выполнения (и тем самым получили доступ) к всем каталогам и, в конечном итоге, к файлам, в которых исполняемый файл.

Начните с того, чтобы вернуть exec в каталоги:

find . -type d -exec chmod +x {} \;

If у вас были исполняемые программы, а для каждого из них:

chmod +x filename

[3] в приведенных выше командах дает права на выполнение всем (пользователю, группе и другим - три разных уровня доступа в файловая система linux / posix)). Если вам по каким-то причинам необходимо ограничить доступ только к пользовательской или пользовательской + группе, вы можете заменить +x на u+x или ug+x, чтобы добиться этого.

0
ответ дан 18 July 2018 в 08:45

Вы удалили права выполнения (и тем самым получили доступ) к всем каталогам и, в конечном итоге, к файлам, в которых исполняемый файл.

Начните с того, чтобы вернуть exec в каталоги:

find . -type d -exec chmod +x {} \;

If у вас были исполняемые программы, а для каждого из них:

chmod +x filename

[3] в приведенных выше командах дает права на выполнение всем (пользователю, группе и другим - три разных уровня доступа в файловая система linux / posix)). Если вам по какой-то причине необходимо ограничить доступ только к пользовательской или пользовательской + группе, вы можете заменить +x на u+x или ug+x, чтобы достичь этого.

0
ответ дан 24 July 2018 в 19:10

Другие вопросы по тегам:

Похожие вопросы: