Linux Mint 17およびDLNA

なぜこれがすべて必要なのですか?



Linux Mintは素晴らしいホームOSです。 あらゆる好み、インストール、初心者でも簡単で理解しやすいグラフィカル環境の幅広い選択、インストール後すぐに必要なソフトウェアの基本セット、便利なアプリケーションマネージャー、および基本的なマルチメディアコーデックが用意されています。 全体として、ナビゲートしてLinuxに慣れるのに最適なシステムです。



画像



しかし、自宅にNASなどを持たない人には問題がありますが、DLNAをサポートする他のデバイスでPCのコンテンツを視聴したいのです。 Linuxでは、さまざまなDLNAサーバーがありますが、 MiniDLNA最適です。 これにはいくつかの理由があります。 まず、これは典型的なUnixの方法です。このサーバーはDLNAサーバーであり、多くのホイッスルとの組み合わせではなく、コンテンツはどのデバイスでも簡単に認識されます。 AllShareを搭載したSamsung TVでも完全に接続されています。 また、このサーバーの驚くべき速度と要求の厳しいリソースに注目することもできます。



そして、すべてがうまくいくだろうが、ここでチームの助けを借りて
sudo apt-get install minidlna



インストールすると動作しません-リポジトリにはありません。



この誤解を解消するためのさまざまなオプションがありますが、最も正しい方法はソースからインストールすることです。

新たに作成された可能性のあるLinuxoidをこの経路から追い払わず、おそらく誰かを助けるために、多くの情報があるため、落とし穴を回避する方法を書きますが、方法の初めに、人々はもっと簡単なことをする必要があります。



準備する


rootとして実行されているコンソールでコマンドを実行する場合、sudoを記述する必要はありません。



最初に、必要なライブラリをインストールする必要があります。



更新された:



 sudo apt-get update
      
      



そして、ライブラリ自体をインストールします。
 sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libflac-dev libvorbis-dev libogg-dev libid3tag0-dev libexif-dev libjpeg-dev libsqlite3-dev
      
      







現在のMiniDLNAの最新バージョンは1.1.3 です。こちらからダウンロードするか、コンソールからダウンロードできます。
 wget --trust-server-names http://sourceforge.net/projects/minidlna/files/latest/download
      
      



元の名前を保持するにはアドレスの前のキーが必要です。新しいバージョンのリリースでは、ファイル名が異なります。 その後、アーカイブを解凍する必要があります。



 tar -xf minidlna-1.1.3.tar.gz
      
      



展開されたソースフォルダーに移動します
 cd minidlna-1.1.3
      
      







ファイルを含むフォルダーをデバイスにすぐに表示する場合は、コードをわずかに修正する必要があります。
ネタバレを開く
ファイルを表示する方法の要求をオフにするには、ソースフォルダーのupnpsoap.cファイルを修正する必要があります(minidlna-1.1.3、既に存在している必要があります)が、最初にバックアップを作成します。



 sudo cp upnpsoap.c upnpsoap.c.old
      
      



エディターで開きます
 sudo nano upnpsoap.c
      
      



検索(F6)、手順を探します:



 "BrowseContentDirectory"static void BrowseContentDirectory(struct upnphttp * h, const char * action) {
      
      







手順の開始時に、SOAP / XML要求が解析され、処理されて結果が返されます。 要求の解析は、デバッグメッセージの形成で終了します。
 DPRINTF(E_DEBUG, L_HTTP, "Browsing ContentDirectory:\n" " * ObjectID: %s\n" " * Count: %d\n" " * StartingIndex: %d\n" " * BrowseFlag: %s\n" " * Filter: %s\n" " * SortCriteria: %s\n", ObjectID, RequestedCount, StartingIndex, BrowseFlag, Filter, SortCriteria);
      
      







次に、root_container構成パラメーターに応じて、ルートコンテナーの選択が実装されます。



  //     if( strcmp(ObjectID, "0") == 0 ) { //     args.flags |= FLAG_ROOT_CONTAINER; //       if( runtime_vars.root_container ) { //            //       if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_container, BROWSEDIR_ID) == 0) ) ObjectID = MUSIC_DIR_ID; else //   ,    ObjectID = runtime_vars.root_container; } else //       { //      //       if( args.flags & FLAG_AUDIO_ONLY ) ObjectID = MUSIC_ID; } }
      
      







このブロックの直後、データベースへのクエリを含むブロックの前に、ビデオ、音楽、画像のフォルダーリダイレクトコードを追加します。



  //Redirect video to folder if( strcmp(ObjectID, VIDEO_ID) == 0 ) { ObjectID = VIDEO_DIR_ID; } //Redirect music to folder if( strcmp(ObjectID, MUSIC_ID) == 0 ) { ObjectID = MUSIC_DIR_ID; } //Redirect images to folder if( strcmp(ObjectID, IMAGE_ID) == 0 ) { ObjectID = IMAGE_DIR_ID; }
      
      



その結果、修正されたフラグメントは次のようになります。
  if( strcmp(ObjectID, "0") == 0 ) { args.flags |= FLAG_ROOT_CONTAINER; if( runtime_vars.root_container ) { if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_containe$ ObjectID = MUSIC_DIR_ID; else ObjectID = runtime_vars.root_container; } else { if( args.flags & FLAG_AUDIO_ONLY ) ObjectID = MUSIC_ID; } } //Redirect video to folder if( strcmp(ObjectID, VIDEO_ID) == 0 ) { ObjectID = VIDEO_DIR_ID; } //Redirect music to folder if( strcmp(ObjectID, MUSIC_ID) == 0 ) { ObjectID = MUSIC_DIR_ID; } //Redirect images to folder if( strcmp(ObjectID, IMAGE_ID) == 0 ) { ObjectID = IMAGE_DIR_ID; } if( strcmp(BrowseFlag+6, "Metadata") == 0 ) { args.requested = 1; sql = sqlite3_mprintf("SELECT %s, " COLUMNS "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID$ " where OBJECT_ID = '%q';", (args.flags & FLAG_ROOT_CONTAINER) ? "0, -1" : "o.OBJECT_I$ ObjectID); ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg); totalMatches = args.returned; }
      
      







後続の更新の手順を簡素化するには、変更を含むパッチを保存します。
 diff -u upnpsoap.c.old upnpsoap.c > ../minidlna-folders.patch
      
      







ファイルを編集する代わりに、パッチを適用するだけです:



 cd ~/src/minidlna/minidlna- patch < ../minidlna-folders.patch
      
      



これで、構成に進むことができます。
これが必要ない場合は、構成に直接進んでください。



 ./configure
      
      







そしてコンパイル:



 make
      
      







設置


1)将来バージョンを更新したい人のために、以前のバージョンを削除することができます(構成ファイルは保存されます)、これが行われない場合、インストールファイルの構成が新しいバージョンで変更される場合、古いファイルは/ usr / localに残ることがあります、最初のインストールで-直接ステップ2に進みます。



削除するには、以前のインストールのフォルダーに移動して、コマンドを実行します。
 sudo apt-get remove minidlna
      
      



2)インストールを開始します(コメントでは、make installよりも正しい方法が提案されています)。



 sudo checkinstall -D
      
      



-Dスイッチは、Debianパッケージを作成する必要があることを示します。



3)初期インストールを行う場合、initスクリプトを作成する必要があります。
 sudo nano /etc/init.d/minidlna
      
      



、バージョンを更新する場合、他に何もする必要はありません。最初のインストール中に、空のファイルを開き、そこに次のコードを追加する必要があります。



リスティング
 #!/bin/sh # # MiniDLNA initscript # # Based on the mediatomb debian package. # Original authors: Tor Krill <tor@excito.com> # Leonhard Wimmer <leo@mediatomb.cc> # Andres Mejia <mcitadel@gmail.com> # # Modified by: Benoit Knecht <benoit.knecht@fsfe.org> # ### BEGIN INIT INFO # Provides: minidlna # Required-Start: $network $local_fs $remote_fs # Required-Stop:: $network $local_fs $remote_fs # Should-Start: $all # Should-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start minidlna at boot time # Description: Manage the minidlna daemon, a DLNA/UPnP-AV media server. ### END INIT INFO unset USER # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="DLNA/UPnP-AV media server" NAME=minidlnad DAEMON=/usr/local/sbin/minidlnad PIDDIR=/run/$NAME PIDFILE=$PIDDIR/$NAME.pid SCRIPTNAME=/etc/init.d/minidlna DEFAULT=/etc/default/minidlna # Exit if the package is not installed [ -x $DAEMON ] || exit 0 # Read configuration variable file if it is present [ -r $DEFAULT ] && . $DEFAULT # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # Do not start the daemon if NO_START is enabled in DEFAULT if [ "$START_DAEMON" != "yes" ] && [ "$1" != "stop" ]; then log_warning_msg "$NAME: Not starting $DESC." log_warning_msg "$NAME: Disabled in $DEFAULT." exit 0 fi # Set the default configuration file if [ -z $CONFIGFILE ]; then CONFIGFILE=/etc/minidlna.conf fi # Set the default log file if [ -z $LOGFILE ]; then LOGFILE=/var/log/minidlna.log fi # Run as `minidlna' if USER is not specified or is `root' if [ -z $USER ]; then USER=minidlna fi # If no group is specified, use USER if [ -z $GROUP ]; then GROUP=$USER fi DAEMON_ARGS="-f $CONFIGFILE -P $PIDFILE $DAEMON_OPTS" # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started touch $LOGFILE && chown $USER:$GROUP $LOGFILE || return 2 if [ ! -d $PIDDIR ]; then mkdir $PIDDIR || return 2 fi chown $USER:$GROUP $PIDDIR || return 2 start-stop-daemon --start --quiet --pidfile $PIDFILE \ --chuid $USER:$GROUP --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE \ --chuid $USER:$GROUP --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -rf $PIDDIR return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) if [ "$1" = "force-reload" ]; then # Rescan the collection DAEMON_ARGS="$DAEMON_ARGS -R" fi do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac :
      
      



、Ctrl + Oで保存してエディターを終了します-Ctrl + X



4)その後、スクリプトを実行する権利を付与します。
 sudo chmod 755 /etc/init.d/minidlna
      
      



5)そして、initスクリプトをアクティブにします。
 sudo update-rc.d minidlna defaults
      
      



6)デフォルトでは、サービスはユーザーminidlnaで開始されるため、適切なアカウントを作成する必要があります。



 sudo adduser --system --home /var/lib/minidlna --group --gecos "MiniDLNA server" minidlna
      
      



7)サーバー構成ファイルを編集します。
 sudo nano /etc/minidlna.conf
      
      



すべてのテレビがサーバーをポーリングするわけではないため、次のように、メディアフォルダーへのパスも指定する必要があります。「media_dir = V、/ mnt / sdb6 / Video /アレックス/「ファイルの適切なセクション内」:



minidlna.confのリスト
 #   port=8200 #     #     #   network_interface=eth0,eth1 #network_interface=eth0 #    UID,      #    1.1.0 #  Debian    init- #user=jmaggard #     - #    ,    media_dir #     ,   : # A - : media_dir=A,/home/jmaggard/Music # V - : media_dir=V,/home/jmaggard/Videos # P - : media_dir=P,/home/jmaggard/Pictures #    1.1.0,    : # PV -   : media_dir=AV,/var/lib/minidlna/digital_camera # #   ,    . #    "service minidlna force-reload"   root. #    1.1.0,   ,   . media_dir=/var/lib/minidlna #  DLNA-,   #  : "$HOSTNAME:$USER" #friendly_name= #            db_dir=/var/lib/minidlna #     - log_dir=/var/log #    #   log_level=1,2=1,3,4=2 ... #  : "general", "artwork", "database", "inotify", "scanner", "metadata", "http", "ssdp", "tivo" #  : "off", "fatal", "error", "warn", "info" or "debug" #log_level=general,artwork,database,inotify,scanner,metadata,info,ssdp,tivo=warn #   - , : "/" album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg #    #    inotify=yes #   TiVo #enable_tivo=no #   DLNA- #       JPEG- #      . #strict_dlna=no #  -  #   IP-     #presentation_url=http://www.mylan/index.php #   SSDP-,   notify_interval=30 #      DLNA-,   serial=12345678 model_number=1 #    MiniSSDPd,   #      DLNA/UPnP     #minissdpdsocket=/run/minissdpd.sock # ,        # * "." -   # * "B" - " " # * "M" - "" # * "V" - "" # * "P" - "" #   "B"     ,       "Music/Folders" #root_container=. #     ,  ,   #force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title #     # :       #max_connections=50
      
      



8)次に、initスクリプト/ etc / default / minidlnaのパラメーターを確認します。
 sudo nano /etc/default/minidlna
      
      



通常、調整は必要ありません。 ファイルが見つからない場合は、ソースからの初期インストール中にリストをコピーします。
 #  ,   "yes" START_DAEMON="yes" #     #CONFIGFILE="/etc/minidlna.conf" #   - #LOGFILE="/var/log/minidlna.log" #        #  : minidlna #USER="minidlna" #GROUP="minidlna" #    DAEMON_OPTS=""
      
      



通常、この後、追加の設定は必要ありませんが、メディアへのアクセスに問題がある場合(または安全に再生したい場合)、アクセス権を構成できます。



許可の設定:
サービスは制限されたユーザーとして実行されるため、公開されたフォルダーとファイルはすべてのユーザーが読み取り可能である必要があります。したがって、ファイルに対する許可644: "rw- r-- r--"および755: "rwx rx rx"、フォルダー用。



次のコマンドを使用して、minidlna.confで指定された各フォルダーの可用性を確認します。
 sudo -u minidlna ls -l 
      
      



フォルダーが使用できない場合は、アクセス許可を設定します。
 sudo chmod -R 755 
      
      



親フォルダーもすべてのユーザーが読み取り可能である必要があります。 パスで指定された各フォルダーの読み取りアクセス可能性を確認します。 親フォルダーでは、すべての子ファイルとフォルダーにリセット許可が必要でない場合、-Rスイッチなしでchmodを使用します。

アクセス許可を変更する代わりに、ファイルを所有するユーザーまたはグループの代わりにMiniDLNAを実行できます。 これを行うには、/ etc / default / minidlnaのUSERおよびGROUPパラメーターを設定し、次のコマンドで/ var / lib / minidlnaフォルダーの所有者を変更します。
 sudo chown -R : /var/lib/minidlna
      
      







サーバー起動


以下を開始します。



 sudo service minidlna force-reload
      
      







サービスが機能しているかどうかを確認し、起動オプションも確認します。



 ps ax | grep minidlna
      
      







ポートがリッスンしているかどうかを確認します。



 sudo ss -4lnp | grep minidlna
      
      







ログを確認します。



 cat /var/log/minidlna.log
      
      







正常に起動した場合、ログはおよそ次のようになります。



 Gothician gothician # cat /var/log/minidlna.log [2014/07/27 10:05:31] minidlna.c:1014: warn: Starting MiniDLNA version 1.1.3. [2014/07/27 10:05:31] minidlna.c:355: warn: Creating new database at /var/lib/minidlna/files.db [2014/07/27 10:05:31] minidlna.c:1053: warn: HTTP listening on port 8200 [2014/07/27 10:05:31] scanner.c:706: warn: Scanning /var/lib/minidlna [2014/07/27 10:05:31] scanner.c:793: warn: Scanning /var/lib/minidlna finished (0 files)! [2014/07/27 10:05:31] playlist.c:125: warn: Parsing playlists... [2014/07/27 10:05:31] playlist.c:259: warn: Finished parsing playlists. [2014/08/03 09:25:35] minidlna.c:1053: warn: HTTP listening on port 8200
      
      







「警告:Inotify max_user_watches [8192] is low。」と表示された場合、inotifyトラッキング記述子の数を100,000に増やす必要があります。これを行うには、/ etc / sysctl.confファイルに次の行を追加します。



 #MiniDLNA warning fix fs.inotify.max_user_watches = 100000
      
      







エディターによる手動:



 sudo nano /etc/sysctl.conf
      
      







またはコピーアンドペーストコマンド:



 sudo sh -c 'printf "\n\n#MiniDLNA warning fix\nfs.inotify.max_user_watches = 100000\n" >> /etc/sysctl.conf && cat /etc/sysctl.conf'
      
      







パラメータの変更は、システムの再起動後に有効になります。

ブラウザでサーバーアドレスを開きます:8200、ライブラリ内のファイルの数を確認します。バージョン1.1.2以降、接続されているクライアントのリストも表示されます。



DLNA / UPnP-AVサーバーのセットアップが完了しました。



ディレクトリでエラーが発生した場合、ファイルを再スキャンする必要があります。

上記のinitスクリプトを使用する場合、メディアライブラリのスキャンを開始するには、次のコマンドを使用します。



 sudo service minidlna force-reload
      
      







サービスが再開され、接続されたクライアントが切断されます。



各システムの起動時にメディアライブラリをスキャンするには、/ etc / default / minidlnaファイルのDAEMON_OPTSパラメーターに起動キー「-R」を指定できます。 大きなメディアライブラリをスキャンすると、ディスクが大幅にロードされるため、システムのロードが遅くなる可能性があります。



完全なカタログ作成には数分かかる場合があります。 フォルダーは、構成内の宣言の順にスキャンされます。 上記の設定で宣言された小さなフォルダのファイルは、スキャンプロセスの最初のディレクトリに表示されます。 構成内のコンテンツがほとんど再生されない大きなフォルダーを最後に配置することは理にかなっています。



これらはすべてシステムでテストされており、健康のために使用してください。 Linuxユーザーの数が常に増加することを願っています。



http://itadept.ru/、wiki.archlinux.orgの資料に基づいています。



All Articles