Ktorrent - ArchWiki

# Ktorrent

From ArchWiki
Jump to navigation Jump to search

Ktorrent is a the BitTorrent client for KDE.

## Installation

Install ktorrent package or ktorrent using the Package Manager of Your Choice.

## Troubleshooting

It's been seen many times that without the package geoip the kTorrent app is unable to Show any information about the seeders, leechers and the current Trackers, So Install it immediately after you Install kTorrent.Aslo it is advised to enable DHT inside the Settings to troubleshoot the slow speed and low amount of Seeders.

## Script to manage it in command line

Since Ktorrent is a GUI only application, fortunately has a DBUS interface, so you can use scripts to manage it in command line (i.e. from SSH).

Here is the script that I use. I have found it on internet on an OpenSuse forum (made by amaurea) and I integrated new commands to set max upload/download speed and to suspend/resume ktorrent activity.

    /usr/local/bin/kt

    #!/usr/bin/env bash
    #
    # Public domain script by amaurea/amaur on IRC (freenode for example).
    #   Modified by trapanator to support download/upload rate setting and
    #                          to suspend/resume ktorrent network activity
    #
    # gary example
    #   qdbus org.kde.ktorrent /core startAll

    case $1 in
            help)
                    echo "kt: A simple console interface for ktorrent.
    Usage: In the following \"id\" indicates either a torrent hash or index.
           [] indicates optional arguments.

           kt start [id]: If ktorrent is not running, start it. Otherwise,
                          if id is given, start that torrent, otherwise start
                          all torrents.
           kt quit: Quit ktorrent.
           kt load url: Load the torrent given by url. Note that the torrent must
                        be manually startet afterwards.
           kt ls: Print a list of all torrents, of the format: index hash name.
           kt info [id]: Print more detailed info about the selected (or all)
                         torrent(s).
           kt stop [id]: Stop the torrent given by id, or all if id is missing.
           kt name [id]: Like ls, but names only.
           kt remove id: Remove the torrent given by id (but not the actual files).
           kt clear: Remove all torrents.
           kt files [id]: List information about the files of the selected torrent.
           kt pri [id] [priority]: Give the selected torrent the given priority.
           kt pri [id] [file index] [priority]: Set the priority of the given file.
           kt pri [id] equal: Give all files of the torrent the same priority.
           kt pri [id] first: Download the first files in the torrent first.
           kt stu [n] set upload rate to n.
           kt sdu [n] set download rate to n.
           kt suspend   suspend all torrents.
           kt resume    resume all torrents."
           exit ;;
    esac
    pid=$(pidof ktorrent)
    if [ ! $pid ]; then
        case "$1" in
            start)
                ktorrent --display :0.0 ;;
            *)
                echo "ktorrent is not running!" ;;
        esac
        exit
    fi
    eval "export $(perl -pne 's/\0/\n/g' /proc/$(pidof ktorrent)/environ | fgrep -a DBUS_SESSION_BUS_ADDRESS)"
    loc="org.kde.ktorrent"
    cmd="qdbus $loc"
    case "$1" in
     stu)
      if [ "$2" ]; then
       qdbus org.kde.ktorrent /settings setMaxUploadRate $2
       qdbus org.kde.ktorrent /settings apply
      else echo "upload rate missing!" ;  fi ;;
     std)
      if [ "$2" ]; then
       qdbus org.kde.ktorrent /settings setMaxDownloadRate $2
       qdbus org.kde.ktorrent /settings apply
      else echo "download rate missing!" ;  fi ;;
     suspend)
      qdbus org.kde.ktorrent /core org.ktorrent.core.setSuspended true ;;
     resume)
      qdbus org.kde.ktorrent /core org.ktorrent.core.setSuspended false ;;
        load)
            res=$($cmd /core loadSilently "$2" 1) ;;
        list|ls)
            torrents=$($cmd /core torrents)
            i=0
            for torrent in $torrents; do
                name=$($cmd /torrent/$torrent name)
                printf "%d %s %s\n" $i $torrent "$name"
                i=$(($i+1))
            done ;;
        info)
            if [ "$2" ]; then
                if (( ${#2} < 4 )); then
                    torrents=($($cmd /core torrents))
                    torrents=${torrents[$2]}
                else torrents=$2; fi
            else torrents=$($cmd /core torrents); fi
            i=0
            for torrent in $torrents; do
                name=$($cmd /torrent/$torrent name)
                size=$($cmd /torrent/$torrent totalSize)
                dsize=$($cmd /torrent/$torrent bytesToDownload)
                prog=$($cmd /torrent/$torrent bytesDownloaded)
                speed=$($cmd /torrent/$torrent downloadSpeed)
                seed=$($cmd /torrent/$torrent seedersConnected)
                leech=$($cmd /torrent/$torrent leechersConnected)
                priority=$($cmd /torrent/$torrent priority)
                sl=$(printf "[%d|%d]" $seed $leech)
                pri=$(printf "(%d)" $priority)
                printf "%3.0lf%% of %11d %4.0lf kb/s %8s %4s %s\n" $((100*$prog/$dsize)) $dsize $(($speed/1000)) $sl $pri "$name"
                i=$(($i+1))
            done ;;
        name|stop|start|remove|files)
            if (( ${#2} < 4 )); then
                torrents=($($cmd /core torrents))
                torrent=${torrents[$2]}
            else torrent=$2; fi
            case "$1" in
                name)
                    $cmd /torrent/$torrent name ;;
                start)
                    if [ "$2" ]; then res=$($cmd /core start $torrent)
                    else res=$($cmd /core startAll); fi;;
                stop)
                    if [ "$2" ]; then res=$($cmd /core stop $torrent)
                    else res=$($cmd /core stopAll); fi;;
                remove)
                    # qdbus boolean bug workaround: use dbus-send instead
                    res=$(dbus-send --type=method_call --dest=$loc /core org.ktorrent.core.remove string:"$torrent" boolean:false) ;;
                files)
                    n=$($cmd /torrent/$torrent numFiles)
                    for (( i=0; i < $n; i++ )); do
                        path=$($cmd /torrent/$torrent filePath $i)
                        pct=$($cmd /torrent/$torrent filePercentage $i)
                        size=$($cmd /torrent/$torrent fileSize $i)
                        priority=$($cmd /torrent/$torrent filePriority $i)
                        printf "%d %3.0lf%% of %11d [%d] %s\n" $i $pct $size $priority "$path"
                    done ;;
            esac ;;
        pri|priority|prioritize)
            if [ $3 ]; then
                if (( ${#2} < 4 )); then
                    torrents=($($cmd /core torrents))
                    torrent=${torrents[$2]}
                else torrent=$2; fi
                if [ ! $torrent ]; then exit; fi
                n=$($cmd /torrent/$torrent numFiles)
                if [ $4 ]; then
                    res=$($cmd /torrent/$torrent setFilePriority $3 $4)
                else
                    case $3 in
                        equal|equalize)
                            for (( i=0; i < $n; i++ )); do
                                res=$($cmd /torrent/$torrent setFilePriority $i 40)
                            done ;;
                        inc|increasing)
                            for (( i=0; i < $n; i++ )); do
                                pri=$(printf "%2.0lf" $(((4*$i/$n+3)*10)))
                                res=$($cmd /torrent/$torrent setFilePriority $i $pri)
                            done ;;
                        dec|decreasing)
                            for (( i=0; i < $n; i++ )); do
                                pri=$(printf "%2.0lf" $(((4*($n-$i-1)/$n+3)*10)))
                                res=$($cmd /torrent/$torrent setFilePriority $i $pri)
                            done ;;
                        first)
                            m=$(($n < 3 ? $n : 3))
                            for (( i=0; i < $m; i++ )); do
                                res=$($cmd /torrent/$torrent setFilePriority $i $(((6-$i)*10)))
                            done
                            for (( i=3; i < $n; i++ )) do
                                res=$($cmd /torrent/$torrent setFilePriority $i 30)
                            done ;;
                        *)
                            res=$($cmd /torrent/$torrent setPriority $3) ;;
                    esac
                fi
            else echo Too few arguments!; fi ;;
        clear)
            torrents=$($cmd /core torrents)
            for torrent in $torrents; do
                res=$(dbus-send --type=method_call --dest=$loc /core org.ktorrent.core.remove string:"$torrent" boolean:false)
            done ;;
        quit)
            res=$($cmd /MainApplication quit) ;;
        *)
            echo "Unrecognized command: '$1'" ;;
    esac

Category:

- BitTorrent